ps:按这里的教程来安装的https://blog.csdn.net/sinat_30569973/article/details/52232850;
修改了一些错误,加入了自己的理解。
~~~~~~~~~
一.准备环境
1.1. 安装包 1)准备4台PC(虚拟机) 2)安装配置Linux系统:CentOS-7.0-1406-x86_64-DVD.iso 3)安装配置Java环境:jdk-8u91-linux-x64.gz 4)安装配置Hadoop:hadoop-2.7.2-x64.tar.gz 5)安装配置Hbase:hbase-1.2.1-bin.tar.gz 1.2. 网络配置 外部主机ip--windows下的虚拟网卡ip(192.168.64.1),对虚拟机内是192.168.64.2的路由。 ip分配如下: master 192.168.64.128, slave1 192.168.64.131, slave1 192.168.64.132, slave1 192.168.64.133, 1.3. 常用命令 # systemctl start foo.service #运行一个服务 # systemctl stop foo.service #停止一个服务 # systemctl restart foo.service #重启一个服务 # systemctl status foo.service #显示一个服务(无论运行与否)的状态 # systemctl enable foo.service #在开机时启用一个服务 # systemctl disable foo.service #在开机时禁用一个服务 # systemctl is-enablediptables.service #查看服务是否开机启动 # reboot #重启主机 # shutdown -h now #立即关机 # source /etc/profile #配置文件修改立即生效 # yum install net-tools # yum update 更新所有组件。
二.安装配置CentOS
2.1安装CentOS 2.2配置IP 2.2.1检查IP # ip addr 或 # ip link 2.2.2配置IP和网管 #cd/etc/sysconfig/network-scripts #进入网络配置文件目录 # find ifcfg-en* #查到网卡配置文件,例如ifcfg-en1 # vi ifcfg-en1 #编辑网卡配置文件 或 # vi/etc/sysconfig/network-scripts/ifcfg-en1 #编辑网卡配置文件 配置内容: BOOTPROTO=static #静态IP配置为static,动态配置为dhcp ONBOOT=yes #开机启动 IPADDR=202.196.37.40 #IP地址 NETMASK=255.255.255.0 #子网掩码 GATEWAY=202.196.37.254 DNS1=202.196.35.67 # systemctl restart network.service #重启网络 2.2.3配置hosts # vi /etc/hosts 编辑内容: 一定去掉 127.0.0.1 localhost 等; 192.168.64.128 master 192.168.64.131 slave1 192.168.64.132 slave2 192.168.64.133 slave3 2.3关闭防火墙 ,需要管理员密码。 # systemctl status firewalld.service #检查防火墙状态 # systemctl stop firewalld.service #关闭防火墙 # systemctl disable firewalld.service #禁止开机启动防火墙 2.4时间同步 # sudo yum install -y ntp #安装ntp服务 # sudo ntpdate cn.pool.ntp.org #同步网络时间 -- [oscar@bogon ~]$ ntpdate cn.pool.ntp.org 31 Mar 20:12:39 ntpdate[62993]: bind() fails: Permission denied [oscar@bogon ~]$ sudo ntpdate cn.pool.ntp.org [sudo] oscar 的密码: 31 Mar 20:13:51 ntpdate[63014]: step time server 85.199.214.101 offset 14.197753 sec [oscar@bogon ~]$ -- 2.5安装配置jdk 先卸载掉openjdk,在安装sun公司的jdk. 2.5.1卸载自带jdk CentOS会自带OpenJdk,用命令java -version 查看。 先查看有那些JDK相关。 命令:rpm -qa | grep java 显示如下信息: [oscar@bogon ~]$ rpm -qa|grep java java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.5.el7.x86_64 java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64 java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 python-javapackages-3.4.1-11.el7.noarch tzdata-java-2017b-1.el7.noarch javapackages-tools-3.4.1-11.el7.noarch 分别对应卸载: (以java开头的,带有openjdk的,才是该卸载的,其他不用的) sudo rpm -e --nodeps java-1.8.0-openjdk sudo rpm -e --nodeps java-1.7.0-openjdk sudo rpm -e --nodeps java-1.8.0-openjdk-headless sudo rpm -e --nodeps java-1.7.0-openjdk-headless 2.5.2 开启22端口 检查22端口是否打开:lsof -i:22 若没有,就开启sshd服务:service sshd start Linux下安装lrzsz,方便和windows的互通(上传和下载) sudo yum -y install lrzsz rz 命令然后按回车,就会弹出一个窗口,然后你就在这个窗口找到你下载好的jdk, 使用 rz 命令的好处就是你在哪里输入rz导入的安装包他就在哪里,不会跑到根目录下 2.5.3 JDK安装 方法1: 下载jdk包(jdk-8u162-linux-x64.tar.gz)到windows下,用命令rz上传到你的linux服务器; cd到要安装的目录(CD的目录前,也要/符号) ---用 ls /home ,查看你上传的文件到底在哪个路径下; 用 tar 解压缩(因为要创建文件夹,所以要权限sudo) sudo tar -zxvf /home/oscar/jdk-8u162-linux-x64.tar.gz 方法2: 下载jdk-8u161-linux-x64.rpm 到windows,并上传到linux; cd到要安装的目录(CD的目录前,也要/符号) 运行以下的命令来安装: rpm -ivh jdk-8u25-linux-x64.rpm 另:这时安装包已经没用了,一般都会删掉安装包 rm -rf jdk-8u162-linux-x64.tar.gz -f 不询问删除 , -r 递归删除 2.5.3各个主机之间复制jdk master安装完后,直接复制到其他机器。 # scp -r /usr/java slave1:/usr # scp -r /usr/java slave2:/usr # scp -r /usr/java slave3:/usr 若默认是非管理员登录,会提示permission denied。 --解决方法是在机器名前,加root@,强调用root身份登录。 2.5.4 配置jdk环境变量 # sudo vi /etc/profile ---(修改文件,需要管理员权限,sudo) 编辑内容,在文件最后加入(注意你当前安装的java版本号) export JAVA_HOME=/usr/java/jdk1.8.0_162 export PATH=$JAVA_HOME/bin:$PATH exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # source/etc/profile #使配置文件立即生效 # java -version #查看java版本,检查是否正确安装jdk。 --另一种方法: 在/etc/profile.d/下创建一个叫做java.sh 的文件, vi /etc/profile.d/java.sh 把下面的命令添加到文件中: #!/bin/bash JAVA_HOME=/usr/java/jdk1.8.0_25/ PATH=$JAVA_HOME/bin:$PATH export PATH JAVA_HOME export CLASSPATH=. 保存并关闭文件。为了使它有执行的权限运行以下的命令: chmod +x /etc/profile.d/java.sh 接下来,使刚才改变的环境变量永久有效运行以下下面的命令: source /etc/profile.d/java.sh 2.6配置ssh无密钥访问 分别在各个主机上检查ssh服务状态: # systemctl status sshd.service #检查ssh服务状态 # yum install openssh-server openssh-clients #安装ssh服务,如果已安装,则不用执行该步骤 # systemctl start sshd.service #启动ssh服务,如果已安装,则不用执行该步骤 分别在各个主机上生成密钥 # ssh-keygen -t rsa #生成密钥 以下是把其他机器上的密钥拷贝到master上,为了区分改了名字。 在slave1上 # cp ~/.ssh/id_rsa.pub ~/.ssh/slave1.id_rsa.pub #scp~/.ssh/slave1.id_rsa.pub master:~/.ssh 在slave2上 # cp ~/.ssh/id_rsa.pub ~/.ssh/slave2.id_rsa.pub # scp ~/.ssh/slave2.id_rsa.pubmaster:~/.ssh 在slave3上 # cp ~/.ssh/id_rsa.pub ~/.ssh/slave3.id_rsa.pub # scp ~/.ssh/slave3.id_rsa.pubmaster:~/.ssh ---以下是把密钥公约放在一起,发放给所有机器 在master上 # cd ~/.ssh # cat id_rsa.pub >> authorized_keys # cat slave1.id_rsa.pub >>authorized_keys # cat slave2.id_rsa.pub >>authorized_keys # cat slave3.id_rsa.pub >>authorized_keys # scp authorized_keys slave1:~/.ssh # scp authorized_keys slave2:~/.ssh # scp authorized_keys slave3:~/.ssh 依次在所有机器上执行 #chmod 700 .ssh #chmod 600 .ssh/authorized_keys #service sshd restart ->重新启动ssh服务 用命令 #ssh slave1 互相测试是否可以免密登陆。 ----需要注意的是 SSH是针对用户的,在哪个用户下执行的目录,在哪个用户下生成.ssh文件夹。 ----如果root和其他用户(如oscar)下都有.ssh的文件,linux只检查root下的文件,最终不能免密登录。
三.安装配置hadoop
3.1安装hadoop 上传hadoop-2.7.2.tar.gz安装包到root根目录 --开xshell5,连接master,命令rz; 解压安装 # sudo tar -zxvf ~/hadoop-2.9.0.tar.gz # rm -rf hadoop-2.9.0.tar.gz #删除压缩包,可不删 创建一些备用目录 # cd /usr/hadoop-2.9.0 #mkdir tmp #进入目录操作就可不带目录了。 # mkdir /usr/hadoop-2.9.0/logs # mkdir /usr/hadoop-2.9.0/hdf # mkdir/usr/hadoop-2.9.0/hdf/data # mkdir /usr/hadoop-2.9.0/hdf/name -----以下是配置文件---- 3.1.1 在hadoop中配置hadoop-env.sh文件 在文件 etc/hadoop/hadoop-env.sh中配置Java_Home # set to the root ofyour Java installation exportJAVA_HOME=/usr/java/jdk1.8.0_162 3.1.2 修改yarn-env.sh配置Java_Home export JAVA_HOME=/usr/java/jdk1.8.0_162 3.1.3 修改slaves # vi /usr/hadoop-2.7.2/etc/hadoop/slaves 删除:localhost 添加: slave1 slave2 slave3 3.1.4 修改core-site.xml # vi/usr/hadoop-2.7.2/etc/hadoop/core-site.xml 配置内容:3.1.5修改hdfs-site.xml # vi /usr/hadoop-2.6.0/etc/hadoop/hdfs-site.xml 配置内容: fs.default.name hdfs://master:9000 hadoop.tmp.dir file:/usr/hadoop-2.9.0/tmp 3.1.6修改mapred-site.xml #cd /usr/hadoop-2.7.2/etc/hadoop # cp mapred-site.xml.template mapred-site.xml --- mapred-site.xml 是指定所用的框架,但默认没有这文件,只有带.template后缀的文件。 # vi mapred-site.xml 配置内容: dfs.datanode.data.dir /usr/hadoop-2.9.0/hdf/data <final>truefinal>dfs.namenode.name.dir /usr/hadoop-2.9.0/hdf/name <final>truefinal>3.1.7修改yarn-site.xml # vi/usr/hadoop-2.7.2/etc/hadoop/yarn-site.xml 配置内容: mapreduce.framework.name yarn mapreduce.jobhistory.address master:10020 mapreduce.jobhistory.webapp.address master:19888 3.2各个主机之间复制hadoop # scp -r /usr/ hadoop-2.9.0 root@slave1:/usr # scp -r /usr/ hadoop-2.9.0 root@slave2:/usr # scp -r /usr/ hadoop-2.9.0 root@slave3:/usr 3.3各个主机配置hadoop环境变量 # vi /etc/profile 编辑内容: export HADOOP_HOME=/usr/hadoop-2.9.0 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_LOG_DIR=/usr/hadoop-2.9.0/logs export YARN_LOG_DIR=$HADOOP_LOG_DIR # source /etc/profile #使配置文件生效 3.4在master节点格式化namenode ,注意,一定不要在slave上格式化; # cd /usr/hadoop-2.9.0/sbin #为啥非得CD到这个目录啊?不用吧。 # hdfs namenode -format 3.5完成之后,master节点启动HDFS ~补充:因为我不是用的root身份登录的,SSH的免密也不是用的root,所以普通用户可能没权限增删文件和执行程序,就需要额外给当前使用的用户hadoop文件夹以及子目录各种权限。命令如下,在各机器上都要执行。 # sudo chown -R oscar:oscar /usr/hadoop-2.9.0 # sudo chmod -R 777 /usr/hadoop-2.9.0 现在,可以启动HDFS了: # cd /usr/hadoop-2.7.2/sbin # sh start-all.sh 检查hadoop启动情况: http://192.168.64.128:50070 (hdfs管理界面) http://192.168.64.128:8088/cluster (yarn管理界面) 检查进程: # jps master主机包含ResourceManager、SecondaryNameNode、NameNode等,则表示启动成功,例如 2212 ResourceManager 2484 Jps 1917 NameNode 2078 SecondaryNameNode 各个slave主机包含DataNode、NodeManager等,则表示启用成功,例如 17153 DataNode 17334 Jps 17241 NodeManager 另提示:在widows的hosts下也加入这些主机,更方便在外面访问。 C:\Windows\System32\drivers\etc目录下可以找到host文件。 yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.mapred.ShuffleHandler yarn.resourcemanager.address master:8032 yarn.resourcemanager.scheduler.address master:8030 yarn.resourcemanager.resource-tracker.address master:8031 yarn.resourcemanager.admin.address master:8033 yarn.resourcemanager.webapp.address master:8088