在Ubuntu上配置Hadoop环境,踩了太多的坑,站在前人的肩膀上,总结一下自己的心得,帮大家排除一些容易犯错的地方...
这是我自己的配置环境:
Ubuntu14.04
Hadoop2.6
Jdk1.8
eclipse3.8
步骤:
1.配置JAVA环境
2.配置ssh
3.安装Hadoop
1.Ubuntu上配置JAVA环境:
1)将下载好的tar.gz 文件解压到一个文件夹下,JDK下载地址:JDK下载地址
2)配置环境变量
打开终端输入命令
sudo gedit /etc/profile
输入密码后,打开配置文件如下图所示:
在profile文件到最后加上这些代码:
#set java environment
JAVA_HOME=/home/hadoop/java/jdk1.8.0_05
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
如图:(注意JAVA_HOME路径要改成你自己的)
保存文件后,在终端输入:
java -version
如图所示,如果显示这些信息,则说明java环境配置完成。
2.配置SSH服务
由于Hadoop不同结点间到通信是用的ssh,所以我们需要安装ssh
1)在Ubuntu终端输入如下命令:
sudo apt-get install openssh-server
如提示查找不到openssh的源,则我们需要更新apt,使用如下命令:
sudo apt-get update
然后再输一遍上一句命令即可完成安装ssh
2)设置ssh免密登陆
在终端输入如下命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
这里稍微解释一下:ssh-keygen代表生成密钥;-t(注意区分大小写)表示指定生成的密钥类型,dsa是dsa密钥认证的意思,即密钥类型;-P用于提供密语;-f指定生成的密钥文件。然后把id_dsa.pub(公钥)追加到授权的key里面去。
这样,就完成了SSH的部署。
3.部署hadoop之单机模式与伪分布式模式
1)将下载好的hadoop解压,重新命名为hadoop。Hadoop下载地址:Hadoop下载地址,这里注意,我们要下载二进制类型的即binary,而不是source类型,source类型是源代码,需要编译才能使用。
打开解压后的hadoop文件夹,在hadoop-env.sh文件中做修改,在第25行左右到位置中有export JAVA_HOME=*******这样到字样,修改JAVA_HOME的值为你机器中jdk到文件路径即可,这里到值和/etc/profile是相同的。
现在就可以进行单机模式了。
2)伪分布模式
这里需要修改etc/hadoop文件夹中到2个文件(现在可以不启动yarn)。分别是core-site.xml、hdfs-site.xml 两个文件
具体修改内容如下:(file:/home/hadoop/hadoop...,红色部分,系统用户名不同,相应的路径也不同,这里的用户是hadoop)
core-site.xml:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
注意,修改时,相当于是进入vim编辑,按insert键才能插入代码,然后再按esc,再按“:”,左下角就出现“:”,然后输入“write”,则将代码写入,再按“:”,再输入“exit”退出vim编辑
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
</property>
</configuration>
这样就配置好了Hadoop伪分布模式。
4.运行wordcount例子
1)首先格式化namenode并开启hadoop相关进程(一般启动前把tmp里面的文件全部删除)
bin/hdfs namenode -format
sbin/start-dfs.sh
2)查看所有进程
3)把本地到hadoop/input (自己建立的)文件夹中到文件上传到hdfs文件系统到input文件夹下
bin/hdfs dfs -mkdir /input
bin/hdfs dfs -put input/* /input
查看文件是否上传到hdfs
bin/hdfs dfs -cat /input/word
4)运行wordcount
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
5)查看结果
bin/hdfs dfs -cat /output/*
也可以将运行结果取回到本地:
rm -r ./output # 先删除本地的 output 文件夹(如果存在)
bin/hdfs dfs -get /output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists" ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
bin/hdfs dfs -rm -r output
6)关闭进程
sbin/stop-dfs.sh