1.安装虚拟机,配置ip(参考链接:点击这里)
2.更改主机名,关闭防火墙,设置ip映射
[root@hadoop001 ~]# vi /etc/sysconfig/network //更改主机名
[root@hadoop001 ~]# service iptables stop //关闭防火墙
[root@hadoop001 ~]# chkconfig iptables off //永久关闭防火墙
[root@hadoop001 ~]# vi /etc/hosts //增加ip和主机名映射关系
3.安装JDK环境并配置全局环境变量(参考链接:点击这里)
4.下载我们需要安装的cdh软件包,本教程使用的cdh版本为hadoop-2.6.0-cdh5.7.0.tar.gz(1.可以直接通过wget cdh包链接下载 2.windows下载后上传至linux上)
cdh下载地址:点击这里
5.使用拥有root权限的用户创建管理hadoop集群用户 useradd hadoop,然后切换到hadoop用户在其家目录下创建生产环境下的目录 mkdir app software data log
[root@hadoop001 ~]# useradd hadoop //添加hadoop用户
[root@hadoop001 ~]# su - hadoop
[hadoop@hadoop001 ~]$ mkdir app software data log
6.上传tar包到hadoop用户的software目录下并解压
7.使用hadoop用户在app目录下制作软连接hadoop
8.查看hadoop目录
[hadoop@hadoop001 app]$ cd hadoop/
[hadoop@hadoop001 hadoop]$ lldrwxr-xr-x. 2 hadoop hadoop 4096 Mar 24 2016 bin //存放一些shell脚本
drwxr-xr-x. 2 hadoop hadoop 4096 Mar 24 2016 bin-mapreduce1
drwxr-xr-x. 3 hadoop hadoop 4096 Mar 24 2016 cloudera
drwxr-xr-x. 6 hadoop hadoop 4096 Mar 24 2016 etc //存放配置文件
drwxr-xr-x. 5 hadoop hadoop 4096 Mar 24 2016 examples
drwxr-xr-x. 3 hadoop hadoop 4096 Mar 24 2016 examples-mapreduce1
drwxr-xr-x. 2 hadoop hadoop 4096 Mar 24 2016 include
drwxr-xr-x. 3 hadoop hadoop 4096 Mar 24 2016 lib //存放jar包
drwxr-xr-x. 2 hadoop hadoop 4096 Mar 24 2016 libexec
-rw-r--r--. 1 hadoop hadoop 17087 Mar 24 2016 LICENSE.txt
-rw-r--r--. 1 hadoop hadoop 101 Mar 24 2016 NOTICE.txt
-rw-r--r--. 1 hadoop hadoop 1366 Mar 24 2016 README.txt
drwxr-xr-x. 3 hadoop hadoop 4096 Mar 24 2016 sbin //存放的是一些启动停止命令
drwxr-xr-x. 4 hadoop hadoop 4096 Mar 24 2016 share
drwxr-xr-x. 17 hadoop hadoop 4096 Mar 24 2016 src
9.使用hadoop用户修改一系列配置文件
9.1.vi etc/hadoop/hadoop-env.sh:
[hadoop@hadoop001 hadoop]# vi hadoop-env.sh //修改两处
export JAVA_HOME=/usr/java/jdk1.8.0_45 //1.虽然该位置配置了JAVA_HOME,但是还是要显示的写出自己jdk的路径(bug)export HADOOP_PID_DIR=/home/hadoop/data/tmp //2.该目录为存放你执行start-dfs.sh后的jps当前进程nn/dn/snn的pid文件的目录(默认在/tmp下名称为hadoop-hadoop.进程名.pid,但是/tmp目录下保存时间一般为30天,如果集群启动30天以后/tmp下的pid文件被删除掉的话到时候你再去stop-dfs.sh的时候会出现no namenode/datanode.. to stop,就会有问题,一句话,缺少pid文件的话,无论是启动还是停止都会有问题,所有我们将这些重要的文件保存在我们指定的目录中,该配置只针对nn/dn/snn的pid,至于其它组件的话需要在其它配置文件中配置,当然如果你的集群是CDH的话则不用关心pid这个问题,因为CDH已经帮我们考虑到这个问题了,会帮我优化的很好的)
9.2.vi etc/hadoop/core-site.xml:
[hadoop@hadoop001 hadoop]# vi /etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <!--该参数指定你的hdfs集群的namenode是谁-->
<value>hdfs://hadoop001:9000</value> <!--hadoop001为你的主机名-->
</property>
</configuration>
9.3.在配置文件目录下 vi slaves文件增加上你的主机名,即datanode是谁(多个dn的话换行即可)
hadoop001
9.4.vi etc/hadoop/hdfs-site.xml:
[hadoop@hadoop001 hadoop]$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name> <!--该参数是配置你的hdfs数据块的副本数-->
<value>1</value>
</property><property>
<name>dfs.namenode.secondary.http-address</name> <!--该参数是配置你secondaryNamenode是谁-->
<value>hadoop001:50090</value>
</property><property>
<name>dfs.namenode.secondary.https-address</name> <!--该参数含义同上,只不过为http的加密 -->
<value>hadoop001:50091</value>
</property>
</configuration>9.5 vi mapred-site.xml(需要先mv mapred-site.xml.template mapred-site.xml)
<configuration> <property> <name>mapreduce.framework.name</name> <!--该参数是说明你的mr程序是部署在yarn上,即使用yarn调度--> <value>yarn</value> </property> </configuration>
9.6 vi yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
10.配置免密钥(如果不配置的话无法远程登陆其它机器,或者需要我们频繁输入密码,但是这里我们的hadoop用户根本没有密码,所以需要通过ssh免密来实现)
[hadoop@hadoop001 hadoop]$ ssh-keygen //执行该语句一直按enter,会在当前用户的家目录生成一个.ssh的隐藏文件夹,里面存放着私钥和公钥
[hadoop@hadoop001 ~]$ cd .ssh/
[hadoop@hadoop001 .ssh]$ ll
total 12
-rw-------. 1 hadoop hadoop 1675 Jul 2 16:58 id_rsa //私钥文件
-rw-r--r--. 1 hadoop hadoop 398 Jul 2 16:58 id_rsa.pub //公钥文件
-rw-r--r--. 1 hadoop hadoop 407 Jul 2 17:00 known_hosts //一个维护信任的文件,输入yes时候会添加进该文件[hadoop@hadoop001 .ssh]$ cat id_rsa.pub >> ~/.ssh/authorized_keys //执行该语句,将公钥追加到authorized_keys这个固定的信任文件中
[hadoop@hadoop001 .ssh]$ chmod 600 ~/.ssh/authorized_keys //必须给该信任文件一个600的权限
然后就可以实现免密钥了。。。。。。。。(可使用命令测试:ssh 主机名 需输入一次yes将主机名添加到known_hosts文件中)
Attention:如果是多台需要实现ssh免密的话,首先需要在每一台上面都先执行ssh-keygen,然后每一台的用户家目录下都会生成一个.ssh的隐藏文件,然后文件中会有对应的公钥文件和私钥文件,然后需要选择一台在上面执行cat id_rsa.pub >> ~/.ssh/authorized_keys ,然后使用scp命令,将当前机器上的authorized_keys文件(该文件权限必须为600)远程发送到别的机器上就可以实现在当前机器远程登陆其它机器了,原理就是让你想远程登陆的机器上面拥有你本机的公钥即可。
11.启动hdfs
11.1.格式化hdfs
[hadoop@hadoop001 hadoop]$ bin/hdfs namenode -format
11.2.启动namenode,datanode进程,secondaryNamenode进程
[hadoop@hadoop001 hadoop]$ sbin/start-dfs.sh
[hadoop@hadoop001 hadoop]$ jps
4384 NameNode
4664 SecondaryNameNode
4475 DataNode
4767 Jps
11.3启动yarn的进程(ResourceManager和NodeManager进程)[hadoop@hadoop001 hadoop]$ start-yarn.sh
[hadoop@hadoop001 hadoop]$ jps
11858 DataNode
12389 Jps
12038 SecondaryNameNode
12359 NodeManager
12267 ResourceManager
11758 NameNode...............
也可以使用 start-start/stop.sh(该命令可能过时了)来一次性全部开启/关闭
可以使用ps -ef | grep hadoop查看启动的进程
---------------------------------------------------------------------
补充1:关于jps命令
1.1jps命令是jdk里面的一个命令,可以通过which jps来查看位置,该jps命令是用来查看当前用户启动的java进程,通常是用来查看hadoop各组件的进程情况。
1.2使用jps命令的用户可以查看到自己启动的java进程情况,但是切记,jps后出现的情况有可能是一个残留进程的信息(即被kill掉了),也许过一会你再执行jps就没有进程信息了,所以如果想看是否有某一个hadoop组件进程存在,使用ps -ef是最准确的命令。
1.3使用jps后的用户只能查看到自己的java进程,其它用户启动的java进程你是看不到的,并且即使root用户也不能完全查看到你启动的java进程详细信息,一般情况只能够看到一个进程号和-- process information unavailable这句信息,极少数或许也能看到进程号和进程名称。
1.4jps后出现的进程号是存放在/tmp/hsperfdata_hadoop目录中的,里面以进程号为文件名进行存储,文件中是一些进程信息
补充2:关于/tmp默认30天后会删除一些不常用的文件或者文件夹,我们的集群pid文件之所以修改它的存储路径就是因为集群启动的30后会删除我们的pid文件(通过tmpwatch命令),到时候我们集群启动/停止都会有问题
补充3:...............