单机搭建hadoop环境,方便个人执行与学习hadoop组件
安装jdk
安装jdk1.8,到oracle下载对应系统所需的安装包。
增加环境变量JAVA_HOME, 对于mac系统,使用系统自身的安装jdk,是可以通过命令行/usr/libexec/java_home来获取。
安装hadoop
到官网下载hadoop版本,这里选择了2.7.7
解压到指定目录,然后配置环境变量HADOOP_HOME。
配置ssh
由于启动hadoop需要依赖ssh的免密登陆达到控制集群的关系,这里通过如下命令来实现单机的免密登陆
1 | ssh-keygen -t rsa -f ~/.ssh/id_rsa_hadoop |
设置后密码后,通过ssh localhost来看下是否可以实现登陆成功
注意 对于windows用户,可以需要配置sshd环境;对于mac用户,需要在设置-sharing-Remote Login中将服务打开,同时设置哪些用户可以登陆
同时配置HADOOP_SSH_OPTS环境变量到/etc/profile下1
export HADOOP_SSH_OPTS="-i /Users/roger/.ssh/id_rsa_hadoop -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "
指向刚生成的私钥
配置hadoop
搭建hdfs环境
先进去hadoop安装目录,接着创建如下目录1
2
3./data/hdfs/tmp # 临时文件,有问题的时候,可以删除
./data/hdfs/name # 存放name节点信息
./data/hdfs/data # 存放data真实数据信息
修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件,增加或修改如下内容,这里为了路径方面设置成绝对路径1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
修改$HADOOP_HOME/etc/hadoop/core_site.xml文件,增加或修改如下内容,这里为了路径方面设置成绝对路径1
2
3
4
5
6
7
8
9<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/roger/bigdata/hadoop/hadoop-2.7.7/data/hdfs/tmp</value> //临时文件,有问题的时候,可以删除
<description>A base for other temporary directories.</description>
</property>
修改$HADOOP_HOME/etc/hadoop/hdfs_site.xml文件,增加或修改如下内容,这里为了路径方面设置成绝对路径
1 | <property> |
使用命令${HADOOP_HOME}/bin/hdfs namenode -format来格式化namenode,如果报错需要先修复,保证格式化成功,接着使用命令${HADOOP_HOME}/sbin/start-dfs.sh来启动hdfs功能
使用命令来提交文件到hdfs
1 | hdfs dfs -put ./hello.txt / |
通过浏览器http://localhost:50070来登陆hdfs目录检查文件是否上传成功。
配置yarn
修改$HADOOP_HOME/etc/hadoop/mapred-site.xml文件,增加或修改如下内容,这里为了路径方面设置成绝对路径
1 | <property> |
这里是指定mr的任务采用yarn分配执行
修改$HADOOP_HOME/etc/hadoop/yarn-site.xml文件,增加或修改如下内容,这里为了路径方面设置成绝对路径1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value> // 设置成本机
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value> // 打开聚合日志功能
</property>
接着使用命令${HADOOP_HOME}/sbin/start-yarhn.sh来启动yarn功能
通过浏览器http://localhost:8088来查看yarn是否正常响应。
提交一个作业给hadoop
前提已经提交一个文件提交到hdfs,假设是/README.md,同时保证hdfs没有/output文件夹,否则执行报错1
2cd $HADOOP_HOME
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /README.md /output
最后通过浏览器http://localhost:8088来查看yarn的任务
通过浏览器http://localhost:50070来登陆hdfs目录查看/output,可以通过下载文件来检查是否ok
这里hdfs跟yarn环境都配置好了。
错误
启动作业失败 Exception from container-launch
这个原因是因为hadoop-env.sh中配置的javahome有问题,参考上面的修改方式,修改hadoop-env.sh文件