系统版本:
master: Ubuntu 14.04 salve1: Ubuntu 14.04
hadoop: hadoop 1.2.1
1.系统配置
修改host文件(目的:通过各机器的机器名访问各机IP,这里实际上建立起了机器名和ip的映射关系):
sudo gedit /etc/hosts
删掉127.0.0.1那一行,因为主节点与子节点通信时,会根据机器名找到ip,如果不删除这行,会优先匹配成127.0.0.1,进而找不到主机
在后面添加内容为:
172.22.144.115 master
172.22.144.114 slave1
172.22.144.116 slave2
左边是IP,右边是机器名,下面会修改每台机器的机器名
注意要把集群中所有机器的ip和机器名的映射都加进来
为(master)和子节点(slave)分别创建hadoop用户和用户组:
ubuntu下创建:
先创建hadoop用户组:
sudo addgroup hadoop
然后创建hadoop用户:
sudo adduser -ingroup hadoop hadoop
给hadoop用户添加权限,打开
/etc/sudoers文件(目的:给hadoop用户sudo权限)
sudo gedit /etc/sudoers
按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。
在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL,
hadoop ALL=(ALL:ALL) ALL
这样,就为系统创建了一个新的用户hadoop,建议每台机器都新建一个叫hadoop的用户,便于管理
为本机(master)和子节点(slave)安装JDK环境:
配置软件源(目的:内网可以安装JDK)
ubuntu下一条命令即可:
sudo apt-get install openjdk-6-jre
但是安装好openjdk后有点问题,建议自己下载jdk安装,解压到自定义安装目录后,输入
sudo gedit /etc/environment
打开文件后,在后面加上jdk的bin目录路径,如图,/usr/lib/jvm/jdk1.8.0是jdk的安装路径
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8.0/bin"
保存后退出,输入
sudo source /etc/environment
即可让修改生效,而无需重启
修改 本机(master)和子节点(slave)机器名(目的:方便记忆,最好改成hosts文件对应名)
打开/etc/hostname文件;
sudo gedit /etc/hostname
添加在hosts文件里ip对应的主机名,重启生效
注意,以上所有步骤需要在所有机器上配置
2.安装SSH无密码登陆环境(master&slaves):
主节点(master)和子节点(slave)安装ssh服务:
sudo apt-get install ssh openssh-server
建立ssh无密码登录环境:
做这一步之前首先建议所有的机子全部转换为hadoop用户名,以防出现权限问题的干扰。
切换的命令为:
su hadoop
创建ssh-key,这里我们采用rsa方式;ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
ssh-keygen -t rsa -P ""
进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
这里实际上涉及公钥和秘钥的问题,关于公钥和秘钥请自行百度
非常重要:
将master节点上的rsa.pub通过ssh传到子节点上(目的:公用公钥密钥)X代表第n个结点
scp ~/.ssh/id_rsa.pub hadoop@slaveX:~/.ssh/
进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的(master&slave);
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
这里如果报权限的错,就先将文件传到子节点的home目录下,之后子节点在自行将id_rsa.pub追加到授权文件中,期间还要输入子节点的密码
完成上述操作后,在主节点上输入(X代表第n个节点)
ssh slaveX
如果不需要输入密码,说明ssh无密码环境配置成功
3.hadoop安装配置
1.假设hadoop-x-x-x.tar.gz(代表某一版本的hadoop)在桌面,将它复制到安装目录 /usr/local/下
sudo cp hadoop-x-x-x.tar.gz /usr/local/
2. 解压
cd /usr/local
sudo tar -zxf hadoop-x-x-x.tar.gz
3. 将解压出的文件夹改名为hadoop;
sudo mv hadoop-0.20.203.0 hadoop
4. 将该hadoop文件夹的属主用户设为hadoop(hadoop是我们之间为系统创建的用户,hadoop为用户名)
sudo chown -R hadoop:hadoop hadoop
5. 打开hadoop/conf/hadoop-env.sh文件
sudo gedit hadoop/conf/hadoop-env.sh
6. 配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径)
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0
7. 打开conf/core-site.xml文件
sudo gedit hadoop/conf/core-site.xml
编辑如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
注意:master为主结点用户名字,即hosts里面的主节点机器名
8. 打开conf/mapred-site.xml文件
sudo gedit hadoop/conf/mapred-site.xml
编辑如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
注意:master为主结点用户名字,即hosts里面的主节点机器名
9. 打开conf/hdfs-site.xml文件
sudo gedit hadoop/conf/hdfs-site.xml
编辑如下:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
10. 打开conf/masters文件,添加作为secondarynamenode的主机名,这里需填写 master 就行
sudo gedit hadoop/conf/masters
11. 打开conf/slaves文件,添加作为slave的主机名,一行一个。
sudo gedit hadoop/conf/slaves
这里填成下列的内容 :
slave1
slave2
12.将hadoop复制到子节点上
scp -r /usr/local/hadoop/ hadoop@slaveX:/usr/local/
注意冒号后没有空格
注:这里如果不能复制,就先将文件复制到/home/hadoop下面,即为:
scp -r /usr/local/hadoop hadoop@slaveX:/home/hadoop
再在slave机器上将其移到相同的路径下面/usr/local .
并且要将所有节点的hadoop的目录的权限进行如下的修改:
sudo chown -R hadoop:hadoop hadoop
还有很重要的一点,子节点datanode机器要把复制过来的hadoop里面的data1,data2和logs删除掉!
配置完成
4.启动hadoop集群
第一次启动前,要格式化集群,进入hadoop安装目录
cd /usr/local/hadoop
格式化集群:
bin/hadoop namenode -format
不格式化集群会报错:没找到namenode
启动全部服务直接一条命令:bin/start-all.sh
查看自己的datanode是否启动.
jps
当jps不能正常使用的时候,按照本文配jdk的方式,在environment文件中添加jdk的bin路径即可
连接时可以在namenode(主节点)上查看连接情况:
bin/hadoop dfsadmin -report
也可以直接进入网址:
切记,上面的大多数操作请使用hadoop用户,要不然中间会出许多关于权限的问题。
5.运行wordcount
Wordcount是hadoop自带的示例程序,作为入门使用
进入hadoop安装目录的bin目录下,创建测试txt文件(在hadoop集群中创建目录)
查看目录命令
hadoop dfs -ls /目录
创建目录:
hadoop dfs -mkdir /input
先在本地创建两个txt文件 file01、file02(假定在/home/hadoop目录下)
将两个文件上传至hdfs文件系统
bin/hdfs dfs –put /home/Hadoop/file01 /input/
bin/hdfs dfs –put /home/Hadoop/file02 /input/
子节点离开安全模式,否则可能会导致无法读取input的文件:
bin/hdfs dfsadmin –safemode leave
运行Wordcount:
bin/hadoop jar /xxx/xxx.jar wordcount /input/ /output
(这里的/XXX/代表/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-1.2.1.jar)
jar文件是hadoop自带的,可以在hadoop目录中找到,如果找不到也可以在网上下一个;input是输入目录,output是输出目录
注意在运行Wordcount之前,输出目录不能存在,hadoop会自行建立
查看结果:
bin/hadoop dfs -cat /tmp/output/part-r-00000
重复运行需要删除output
bin/hadoop dfs -rmr /tmp/output
以上命令都属于hadoop,需要进入hadoop目录才能运行