安装环境:
1. 2台 namenode 10台 datanode
3. 安装目录:opt/software
jdk hadoop hbase zookeeper
4.. zookeeper 3台就可以了
jdk rpm -ivh jdk-8u91-linux-x64.rpm
1. master1 修改hostname的操作:
1. 修改hostname -> http://www.cnblogs.com/dkblog/archive/2011/11/02/2233123.html
需要修改两处:一处是 ,另一处是/etc/hosts,只修改任一处会导致系统启动异常。首先切换到root用户。
1.1 vi /etc/sysconfig/network
用任一款你喜爱的编辑器打开该文件,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。
1.2 vi /etc/hosts
注: etc/hosts 这个文件是负责dns 解析的 将hostname 和 ip对应起来的 比如ping slave1 机器会知道对应的ip
在文件末尾加上 192.168.150.20 20-master1
reboot
!!!!!!!以root身份直接在/etc/ssh/sshd_config中找到#PermitRootLogin = yes ,将其去掉重启就可以了。
!!!!!!!发现winscp 调用putty不好用 直接启动putty就可以登陆
1.3 修改slave 的hostname
将192.168.150.23 -> slave11 ping 测试连接 master 和 slave 互ping hostname 如果通了 证明可以连通了
2. SSH master 无密码登陆 所有slave
注: 部分例子中hadoop用户自动忽略成root用户
具体来讲就是 两步 : 1. 生成公钥私钥 2. 想免密码登陆谁就将公钥加到谁的author..keys中
2.1 SSH无密码原理
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
总的来说就是用master的公钥在slave上加密,然后传回mater后用master自己的私钥解密建立连接 记住永远是要用自己的私钥解密
2.2 Master机器上生成密码对
在Master节点上执行以下命令
ssh-keygen –t rsa –P ''
这条命是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。
查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2.3 设置SSH配置
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
设置完之后记得重启SSH服务,才能使刚才设置有效。
service sshd restart
退出root登录,使用普通用户验证是否成功。
ssh localhost
从上图中得知无密码登录本级已经设置完毕,接下来的事儿是
2.4把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub 23-slave11:~/
因为我之前能ping通 第一台slave机器 192.168.150.23 在hosts中命名为23-slave11
所以我直接用scp将公钥进行复制:
2.5下面就针对这个23 这个slave进行配置:
1)查看slave11 中是否有这个公钥
因为还没配置好,登陆的时候还是需要密码的
可以看到公钥已经存进去了 id_rsa.pub
2)在/root/下面创建.ssh文件夹
mkdir ~/.ssh
然后是修改文件夹".ssh"的用户权限,把他的权限修改为"700",用下面命令执行:
chmod 700 ~/.ssh
3)追加到授权文件"authorized_keys"
到目前为止Master的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master的公钥追加到Slave11的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4)用root用户修改"/etc/ssh/sshd_config"
具体步骤参考前面Master的"设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。
修改配置文件:
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
service sshd restart
3. ssh 配置slave 免密码登陆 master
和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)。
以slave11 登陆 master1 为例
3.1 首先创建slave11 自己的公钥和私钥
创建"Slave1.Hadoop"自己的公钥和私钥,并把自己的公钥追加到"authorized_keys"文件中。
1. 生成公钥私钥 钥匙对
ssh-keygen -t rsa -P ''
2 并把自己的公钥追加到"authorized_keys"文件中。用到的命令如下:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. 并追加到"Master.Hadoop"的"authorized_keys"中:
scp ~/.ssh/id_rsa.pub 20-master1:~/
2)在"Master.Hadoop"服务器的操作
用到的命令如下:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
至此一个master slave对可以互相访问了
4. Java 环境安装
4.1 安装jdk
注: 本例中所有的软件都安装在/opt/software/下面
下载jdk 1.8 本例中有机器上面有jdk的rpm包
我直接scp过来了
scp jdk-8u91-linux-x64.rpm 60.12.160.158:~
切到20-master1 直接 rpm –ivh jdk-8u91-linux-x64.rpm
jdk 1.8 会安装到/usr/java下面
4.2 配置环境变量
编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。
1)编辑"/etc/profile"文件
vim /etc/profile
2)添加Java环境变量
在"/etc/profile"文件的尾部添加以下内容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
3)使配置生效
保存并退出,执行下面命令使其配置立即生效。
source /etc/profile
4)使配置生效
java –version 发现jdk 还是 1.7 的
原因是原来机器上安装了openjdk 1.7 所以我们要先卸载openjdk
直接用 rpm -qa | grep java
查找安装过的java 包
然后用命令:
yum -y remove 卸载
比如:
卸载完成后发现 java –version 已经不管用了
此后再安装 jdk 1.8
rpm –ivh jdk-8u91-linux-x64.rpm 就可以了
5. Hadoop集群的安装
所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以"root"的身份进行。
5.1 安装hadoop
安装hadoop到 /opt/software下
解压 hadoop.gz
tar -zxvf hadoop-2.5.2.tar.gz
给hadoop-2.5.2创建软链接
ln -s hadoop-2.5.2 hadoop
效果如下:
5.2 配置hadoop
5.2.1 配置环境变量
把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:
# set hadoop path
export HADOOP_HOME=/opt/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
重启配置文件
Source /etc/profile
5.2.2 配置conf
1)配置hadoop-env.sh 和 yarn-env.sh
该"hadoop-env.sh"文件位于"/opt/software/hadoop/etc/hadoop"目录下。
在文件的末尾添加下面内容 JAVA_HOME
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_91
yarn-env.sh:
也是配置JAVA_HOME
Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
2)配置core-site.xml文件
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。
首先在hadoop根目录下创建一个tmp文件 备用
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://20-master1:9000</value>
</property>
</configuration>
备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
3)配置hdfs-site.xml 文件
在master的命令行终端执行如下命令创建hadoop的数据文件保存目录及元数据保存目录:
1. mkdir /opt/software/hadoop/hadoopdata
2. mkdir /opt/software/hadoop/hadoopname
Vi hdfs-site.xml:
在文件的<configuration></configuration>加入如下内容,保存退出
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/software/hadoop/hadoopdata/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/software/hadoop/hadoopdata/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>21-master2:9001</value>
</property>
</configuration>
4)配置mapred-site.xml文件
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
<configuration>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>240</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>48</value>
<final>true</final>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>6000</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>8000</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx5900m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx7900m</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
效果如下:
5)配置yarn-site.xml文件
<configuration>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</value>
</property>
<!-- Site specific YARN configuration properties -->
<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.resource-tracker.address</name>
<value>20-master1:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>20-master1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>20-master1:8040</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/opt/software/hadoop/logs/userlogs</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
</configuration>
6)配置slaves文件
23-slave11
24-slave12
25-slave13
slave4
slave5
slave6
slave7
slave8
slave9
slave10
注:原本是以ip地址的最后一组数字+slave编号命名的slave,但是发现名字太长了,所以该为直接slave+num了
7)格式化文件系统
bin/hdfs namenode -format
注意:这里的格式化文件系统并不是硬盘格式化,只是针对主服务器hdfs-site.xml的dfs.namenode.name.dir和dfs.datanode.data.dir目录做相应的清理工作。
7)启动和停止服务
sbin/start-all.sh
sbin/stop-all.sh
jps 查看进程
hadoop dfsadmin –report 查看hadoop状态
也可以进入 下面的namenod 和slave 查看进程起来了没有
6. 安装zookeeper
6.1.在namenode机器下,配置zookeeper,先解压安装包,使用命令:
- tar -zxvf zookeeper-3.4.4.tar.gz
6.2.进入zookeeper的配置目录,首先把zoo_sample.cfg重命名一下,可以重新复制一遍,使用命令:
- cp zoo_sample.cfg zoo.cfg
6.3. gedit zoo.cfg ,添加如下内容:
- dataDir=/home/cloud/project/tmp/zookeeper/data
- server.1 = datanode1:7000:7001
- server.2 =datanode2:7000:7001
- server.3 =datanode3:7000:7001
6.4.把zookeeper分别远程拷贝datanode1,datanode2,datenode3,使用如下命令:
- scp –r zookeeper-3.4.4 datanode1:/home/cloud/project
- scp –r zookeeper-3.4.4 datanode2:/home/cloud/project
- scp –r zookeeper-3.4.4 datanode3:/home/cloud/project
6.5.分别在刚才的datanode节点/home/cloud/project/tmp/zookeeper/data目录下,新建文件myid,然后使用命令
- vim.tiny myid
分别在datanode1,datanode2,datanode3的myid中写入对应的server.n中的n,即分别是1,2,3.
6.开启zookeeper服务,在三台datanode机器的zookeeper安装目录下使用命令:
bin/zkServer.sh start
7. 安装hbase
Hbase 需要装在1个master上 和剩下的datanode上面
7.1 解压缩hbase的软件包,使用命令:
1. tar -zxvf hbase-0.94.2.tar.gz
7.2进入hbase的配置目录,在hbase-env.sh文件里面加入java环境变量.即:
1. JAVA_HOME=/usr/java/jdk1.7.0_09/
加入变量:
1. export HBASE_MANAGES_ZK=false
7.3 编辑hbase-site.xml ,添加配置文件:
1. <property>
2. <name>hbase.rootdir</name>
3. <value>hdfs://namenode:9000/hbase</value>
4. </property>
5. <property>
6. <name>hbase.cluster.distributed</name>
7. <value>true</value>
8. </property>
9. <property>
10. <name>hbase.zookeeper.quorum</name>
11. <value>datanode1,datanode2,datanode3</value>
12. </property>
13. <property>
14. <name>hbase.zookeeper.property.dataDir</name>
15. <value>/home/cloud/project/tmp/zookeeper/data</value>
16. </property>
7.4. 编辑配置目录下面的文件regionservers. 命令:
1. vim.tiny regionservers
加入如下内容:
1. datanode1
2. datanode2
3. datandoe3
7.5. 把Hbase复制到其他机器,命令如下:
1. scp -r hbase-0.94.2 datanode1:/home/cloud/project
2. scp -r hbase-0.94.2 datanode2:/home/cloud/project
3. scp -r hbase-0.94.2 datanode3:/home/cloud/project
7.6. 开启hbase服务。命令如下:
1. bin/start-hbase.sh
可以使用bin/hbaseshell 进入hbase自带的shell环境,然后使用命令version等,进行查看hbase信息及建立表等操作。