从全新安装的Ubuntu 12.10一步一步搭建Hadoop环境,主要有 JDK、JRE的安装, SSH的安装及免密码登录, 机器名称(hostnamt)和IP设定, VMWare 使用NAT时网络地址段的设定, hadoop三个配置文件的设定, 以及 hadoop 文件系统格式化、启动、样例的运行。
1. /etc/source.list, apt-get update
2. 设置 hosts
192.168.1.101 Master.Hadoop
192.168.1.102 Slave1.Hadoop
192.168.1.103 Slave2.Hadoop
192.168.1.104 Slave3.Hadoop
3. 设置机器 名称 及 IP
改名称:
/etc/hostname => Master.Hadoop
/etc/hosts => 将 127.0.0.1 与 Master.Hadoop 关联.
修改名称:
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.1
/etc/init.d/networking start //启动网卡
/etc/init.d/networking stop //停止网卡
/etc/init.d/networking restart //重启网卡(用这个就行了)
修改VMWare 的 NAT 子网地址...
在VMWare主界面,点击Edit>Virtual Network Editor菜单进入虚拟网卡参数设置界面。
将VMnet8 的子网地址设置为 191.168.1.0
并且关闭VMnet8 的自动dhcp.
添加DNS服务器,
sudo gedit /etc/resolv.conf
nameserver 10.0.0.10
4. 添加hadoop 用户
sudo addgroup hadoop
sudo adduser -ingroup hadoop hadoop
给hadoop用户添加权限:
sudo gedit /etc/sudoers
在root ALL=(ALL:ALL) ALL 下添加一行 hadoop ALL=(ALL:ALL) ALL
5. master 建立无密码登录环境( 在hadoop的配置过程中,这是一个重要的过程)
sudo apt-get install openssh-server
SSH无密码原理:
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode |
Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
即 Slave 要确定是谁连接的!!!
当A有B的公钥时,才允许B进行连接!!!
所有机器切换到hadoop用户.
su - hadoop
创建ssh-key
ssh-keygen -t rsa -P ""
进入~/.ssh/下,将id_rsa.pub 追加到信任列表中.
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
6. 为本机mater安装JDK、Hadoop
sudo apt-get install openjdk-7-jre %安装jre
sudo apt-get install openjdk-7-jdk %安装jdk
将hadoop-1.0.4复制到/home/hadoop下面.
修改hadoop-1.0.4目录的权限:
sudo chown -R hadoop:hadoop hadoop-1.0.4
修改conf/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
配置hadoop:
core-site.xml =>设置fs.default.name, 文件系统的位置 hdfs://Master.Hadoop:9000
hdff-site.xml =>配置备份方式, dfs.replication
mapred-site.xml=>配置mapreduce的JobTracker, http://Master.Hadoop:9001
masters.xml =>主节点备份??
slaves.xml =>从节点,Slave中,不需要此信息.
JAVA_HOME: hadoop-env.sh 中添加 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
7. 复制master的文件到slave上:
公钥
scp ~/.ssh/id_rsa.pub hadoop@son-1:~/.ssh/id_rsa.pub.master
修改hostname
/etc/hostname
hadoop文件的复制
scp -r /home/hadoop/hadoop hadoop@slave1:~
修改hadoop目录的权限:
sudo chown -R hadoop:hadoop hadoop
将公钥添加到信任列表中:
cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_key
8. 验证hadoop是否正常工作:
bin/hadoop namenode -format
bin/start-all.sh
在各个机器上以 jps 显示正在运行的进程。
注意:
使用单机执行时,不需要ssh,不需要DFS文件系统.
输入直接在linux文件系统的某个文件夹下即可,输出也是直接输出到linux文件系统中。
以下针对伪分布式 和 分布式:
格式化文件系统:(如有必要,删除原 hadoop.tmp.dir 下所有目录 ), 这里要将 hadoop.tmp.dir 目标设置所有者为
hadoop.
chown -R hadoop:hadoop /var/log/tmp_cluster
bin/hadoop namenode -format
启动:
bin/start-all.sh
创建输入文件夹:
bin/hadoop dfs -mkdir input
删除输出文件夹:
bin/hadoop dfs -rmr output
显示文件夹中内容:
bin/hadoop dfs -ls input
添加文件:
bin/hadoop fs -put ./input_dir/test input
运行
bin/hadoop jar hadoop-examples-1.0.4.jar wordcount input output
查看输出
bin/hadoop dfs -cat output/part-r-00000
Q: 为什么 很慢 ?虚拟机的原因?
9. 模式之间的切换:
三种配置..
单机 三个hadoop-site.xml : 均为空.
伪pseudo分布式 : fs.default.name, mapred.job.tracker, dfs.replication, masters中指定SNN的位置(localhost)
,slaves中定从节点的位置(localhost)。
全分布式 : master( namenode和jobTracker守护进程), 从节点( datanode和taskTracker守护进程 ), backup( SNN守
护进程 ).
ln -s conf.cluster conf
ln -s conf.pseudo_cluster conf
ln -s conf.single conf
rm conf
使用软链接来实现各种配置文件中自由切换。