单机搭建hadoop环境

单机搭建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
2
ssh-keygen -t rsa -f ~/.ssh/id_rsa_hadoop
ssh-copy-id -i ~/.ssh/id_rsa_hadoop roger@localhost

设置后密码后,通过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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>dfs.name.dir</name>
<value>/Users/roger/bigdata/hadoop/hadoop-2.7.7/data/hdfs/name</value> //namenode持久存储名字空间,事务日志的本地路径
</property>
<property>
<name>dfs.data.dir</name>
<value>/Users/roger/bigdata/hadoop/hadoop-2.7.7/data/hdfs/data</value> //datanode存放数据的路径
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value> // 如同linux上的文件句柄的限制,当datanode 上面的连接数操作配置中的设置时,datanode就会拒绝连接
</property>
<property>
<name>dfs.replication</name>
<value>1</value> // 设置副本数,因为是单机所以设置成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
2
3
4
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</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
2
cd $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文件

原创技术分享,您的支持将鼓励我继续创作