当前位置:文档之家› 分布并行计算技术

分布并行计算技术

Hadoop部署所需要的软件使用VMwareWorkstationPro搭建虚拟机,安装操作系统 Ubuntu14.04。

JDK1.8Hadoop2.6.01.在Ubuntu中安装JDK将JDK解压缩到 /home/kluas/java在~/.bash_profile中配置环境变量,并通过source~/.bash_profile生效。

#javaexport JAVA_HOME=/home/kluas/java/jdkexport JRE_HOME=/home/kluas/java/jdk/jreexport PATH=$JAVA_HOME/bin;$JRE_HOME/bin:$PATHexport CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH检验JDK是否安装成功 java –version2.配置ssh信任关系,实现无密码登录生成机器A的公私密钥对:ssh-keygen -t rsa,之后一路回车。

在~/.ssh 目录下生成公钥id_rsa.pub,私钥id_ras。

拷贝机器A的id_rsa.pub到机器B的认证文件中:cat id_rsa.pub >> ~/.ssh/authorized_keys这时候机器A到机器B的信任关系就建立好了,此时在机器A可以不需要密码直接ssh登录机器B了3.安装Hadoop2.6.0解压hadoop软件包,编辑/etc/profile文件,并追加export HADOOP_HOME=/usr/kluas/Hadoopexport PATH=HADOOP_HOME/bin:$PATH运行 source /etc/profile命令修改配置文件hadoop目录etc/Hadoop/Hadoop-env.sh追加:export JAVA_HOME=/home/kluas/java/jdk修改配置文件hadoop目录下etc/Hadoop/core-site.xml追加:<property><name>fs.defaultFS</name><value>hdfs://master</value></property><name> hadoop.tmp.dir</name><value>/home/tmp/hadoop</value><property>修改配置文件hadoop目录下etc/Hadoop/hdfs-site.xml追加:<property><name>dfs.datanode.data.dir</name><value>file:///home/hadoop/hdfs/datanode</value></property><property><name> .dir </name><value>file:///home/hadoop/hdfs/namenode </value> </property><property><name>.checkpoint.dir </name><value>file:///home/hadoop/hdfs/namesecondary</value> </property><property><name> dfs.replication </name><value>2 </value></property>修改配置文件hadoop目录下etc/Hadoop/yarn-site.xml追加: <property><name> yarn.nodemanger.aux-services </name><value>mapreduce_shuffle </value></property><property><name> yarn.resourcemanger.hostname </name><value>master </value></property>修改配置文件hadoop目录下etc/Hadoop/mapred-site.xml追加: <property><name></name><value>yarn</value></property><property><name> mapreduce.jobtracker.staging.root.dir </name><value>/home </value></property><property><name> mapreduce.jobhistory.webapp.address </name><value>master:19888</value></property>编辑hadoop目录下etc/hadoop/master追加:master编辑hadoop目录下etc/hadoop/slaves追加:slave1slave2格式化HDFS:master节点运行命令 hdfs namenode –formatmaster节点运行hadoop目录下sbin/start.all.sh启动所有程序4.验证Hadoop环境搭建是否成功:在master和slave节点上输入命令jpsSpark部署:1.下载spark软件包,重命名conf/目录下spark-env,sh.template为spark-env.sh。

重命名conf/目录下slaves.template为slaves。

2.配置spark编辑conf/spark-env.sh文件,在开头添加配置信息:exportSPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop/bin/hadoop/cla sspath)export JAVA_HOME=/usr/local/jdk64/jdk1.8编辑conf/salves文件,追加master,slave13.验证 spark是否安装成功在spark目录中输入命令验证spark是否安装成功bin/run-example SparkPibin/run-example SparkPi 2>& 1|grep “Pi is”程序需求方面:1、定义Mapper,处理输入的Key-Value对,输出中间结果。

2、定义Reducer,可选,对中间结果进行规约,输出最终结果。

3、定义InputFormat 和OutputFormat,可选,InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用,不定义时默认为String。

4、定义main函数,在里面定义一个Job并运行它。

基本简单程序:简单的分布式的Grep,简单对输入文件进行逐行的正则匹配,如果符合就将该行打印到输出文件。

因为是简单的全部输出,所以我们只要写Mapper函数,不用写Reducer函数,也不用定义Input/Output Format。

package demo.hadooppublic class HadoopGrep {public static class RegMapper extends MapReduceBase implements Mapper {private Pattern pattern;public void configure(JobConf job){pattern=pile(job.get("mapred.mapper.regex"));}public void map(WritableComparablekey,Writable value,OutputCollector output,Reporter reporter)throws IOException{ String text=((Text) value).toString();Matcher matcher = pattern.matcher(text);if(matcher.find()){output.collect(key,value);}}}private HadoopGrep (){ }public static void main(String[] args) throws Exception{JobConf grepJob=new JobConf(HadoopGrep.class );grepJob.setJobName( "grep-search" );grepJob.set( "mapred.mapper.regex " ,args[2]);grepJob.setInputPath( new Path(args[0]));grepJob.setOutputPath( new Path(args[1]));grepJob.setMapperClass(RegMapper.class );grepJob.setReducerClass(IdentityReducer.class );JobClient.runJob(grepJob);}}分析:1.Hadoop的HDFS实现了google的GFS文件系统,NameNode作为文件系统的负责调度运行在master,DataNode运行在每个机器上。

同时Hadoop实现了Google的MapReduce,JobTracker作为MapReduce的总调度运行在master,TaskTracker则运行在每个机器上执行Task。

2.main()函数,创建JobConf,定义Mapper,Reducer,Input/OutputFormat 和输入输出文件目录,最后把Job提交給JobTracker,等待Job结束。

3.JobTracker,创建一个InputFormat的实例,调用它的getSplits()方法,把输入目录的文件拆分成FileSplist作为Mapper task 的输入,生成Mapper task 加入Queue4.TaskTracker 向 JobTracker索求下一个Map/Reduce。

相关主题