第一部分:Linux环境安装
Hadoop是运行在Linux,虽然借助工具也可以运行在Windows上,但是建议还是运行在Linux系统上,第一部分介绍Linux环境的安装、配置、Java JDK安装等。
第二部分:完全分布式安装
完全分布式模式才是生产环境采用的模式,Hadoop运行在服务器集群上,生产环境一般都会做HA,以实现高可用。
第一部分:Linux环境安装
一、Vmware网络模式介绍
参考:http://blog.csdn.net/collection4u/article/details/14127671
二、NAT模式配置
NAT是网络地址转换,是在宿主机和虚拟机之间增加一个地址转换服务,负责外部和虚拟机之间的通讯转接和IP转换。
我们部署Hadoop集群,这里选择NAT模式,各个虚拟机通过NAT使用宿主机的IP来访问外网。
我们的要求是集群中的各个虚拟机有固定的IP、可以访问外网,所以进行如下设置:
1、 Vmware安装后,默认的NAT设置如下:
2、 默认的设置是启动DHCP服务的,NAT会自动给虚拟机分配IP,但是我们需要将各个机器的IP固定下来,所以要取消这个默认设置。
3、 为机器设置一个子网网段,默认是192.168.136网段,我们这里设置为100网段,将来各个虚拟机Ip就为 192.168.100.*。
4、 点击NAT设置按钮,打开对话框,可以修改网关地址和DNS地址。这里我们为NAT指定DNS地址。
5、 网关地址为当前网段里的.2地址,好像是固定的,我们不做修改,先记住网关地址就好了,后面会用到。
三、Vmware上安装Linux系统
1、 文件菜单选择新建虚拟机
2、 选择经典类型安装,下一步。
3、 选择稍后安装操作系统,下一步。
4、 选择Linux系统,版本选择CentOS 64位。
5、 命名虚拟机,给虚拟机起个名字,将来显示在Vmware左侧。并选择Linux系统保存在宿主机的哪个目录下,应该一个虚拟机保存在一个目录下,不能多个虚拟机使用一个目录。
6、 指定磁盘容量,是指定分给Linux虚拟机多大的硬盘,默认20G就可以,下一步。
7、 点击自定义硬件,可以查看、修改虚拟机的硬件配置,这里我们不做修改。
8、 点击完成后,就创建了一个虚拟机,但是此时的虚拟机还是一个空壳,没有操作系统,接下来安装操作系统。
9、 点击编辑虚拟机设置,找到DVD,指定操作系统ISO文件所在位置。
10、 点击开启此虚拟机,选择第一个回车开始安装操作系统。
11、 设置root密码。
12、 不要最小化安装,选择桌面版Desktop,这样就会装一个Centos7。
13、 先不添加普通用户,其他用默认的,就把Linux安装完毕了。
四、设置网络
因为Vmware的NAT设置中关闭了DHCP自动分配IP功能,所以Linux还没有IP,需要我们设置网络各个参数。
1、 用root进入Xwindow,右击右上角的网络连接图标,选择PCI以太网--有线设置。
2、 选择有线,选择添加配置,认证中名称自己想,MAC选择现有的一个网卡编号就OK,ipv4中,地址设为手动,地址栏我们自己设置,我这设置的192.168.100.10,网络掩码-255.255.255.0,网关上面创建虚拟机是有网关,不用修改-192.168.100.2,服务器讲自动关闭,地址为202.196.106.115。点击添加。
3、用ping来检查是否可以连接外网,如下图,已经连接成功。
五、修改Hostname
1、 临时修改hostname
[root@localhost Desktop]# hostname bigdata.com
这种修改方式,系统重启后就会失效。
2、 永久修改hostname
想永久修改,应该修改配置文件 /etc/sysconfig/network。
命令:[root@bigdata-senior01 ~] vim /etc/sysconfig/network
打开文件后,
-
NETWORKING=yes #使用网络
-
HOSTNAME=bigdata.com #设置主机名
六、配置Host
-
命令:[root@bigdata ~] vim /etc/hosts
-
添加hosts: 192.168.100.10 bigdata.com
七、关闭防火墙
学习环境可以直接把防火墙关闭掉。
(1) 用root用户登录后,执行查看防火墙状态。
[root@bigdata hadoop2.7.7]# service iptables status
(2) 用[root@bigdata hadoop2.7.7]# service iptables stop关闭防火墙,这个是临时关闭防火墙。
(3) 如果要永久关闭防火墙用。
[root@bigdata hadoop2.7.7]# chkconfig iptables off
关闭,这种需要重启才能生效。
八、关闭selinux
selinux是Linux一个子安全机制,学习环境可以将它禁用。
[hadoop@bigdata hadoop-2.7..7]$ vim /etc/sysconfig/selinux
设置SELINUX=disabled
第三步、安装JDK
九、安装Java JDK
1、 查看是否已经安装了java JDK。
[root@bigdata ~]# java –version
注意:Hadoop机器上的JDK,最好是Oracle的Java JDK,不然会有一些问题,比如可能没有JPS命令。
如果安装了其他版本的JDK,卸载掉。
2、 安装java JDK
(1) 去下载Oracle版本Java JDK:jdk-7u67-linux-x64.tar.gz
(2) 将jdk-7u67-linux-x64.tar.gz解压到/opt/modules目录下
[root@bigdata /]# tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules
(3) 添加环境变量
设置JDK的环境变量 JAVA_HOME。需要修改配置文件/etc/profile,追加
-
export JAVA_HOME="/opt/modules/jdk1.8.1_191"
-
export PATH=$JAVA_HOME/bin:$PATH
修改完毕后,执行 source /etc/profile
(4)安装后再次执行 java –version,可以看见已经安装完成。
-
[root@bigdata-senior01 /]# java -version
-
java version "1.8.1_191"
-
Java(TM) SE Runtime Environment (build 1.8.1_191-b12)
-
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
(5)检测jdk安装包
[root@bigdata /]# rpm -qa | grep java
显示如下:
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2016g-2.el7.noarch
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
(6)卸载openjdk
[root@bigdata /]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
[root@bigdata /]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
[root@bigdata /]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
[root@bigdata /]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
(7)最后在[root@bigdata /]# rpm -qa | grep java 查看
第二部分:完全分布式安装
1、 克隆虚拟机
-
Vmware左侧选中要克隆的机器,这里对原有的BigData01机器进行克隆,虚拟机菜单中,选中管理菜单下的克隆命令。
-
选择“创建完整克隆”,虚拟机名称为BigData02,选择虚拟机文件保存路径,进行克隆。
-
再次克隆一个名为BigData03的虚拟机。
2、 配置网络
修改网卡名称:
在BigData02和BigData03机器上编辑网卡信息。执行sudo vim /etc/udev/rules.d/70-persistent-net.rules命令。因为是从BigData01机器克隆来的,所以会保留BigData01的网卡eth0,并且再添加一个网卡eth1。并且eth0的Mac地址和BigData01的地址是一样的,Mac地址不允许相同,所以要删除eth0,只保留eth1网卡,并且要将eth1改名为eth0。将修改后的eth0的mac地址复制下来,修改network-scripts文件中的HWADDR属性。
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 #有些可能没有这个网卡信息,网络设置是设置mac后,可以不用这一步。
修改网络参数:
BigData02机器IP改为192.168.100.12
BigData03机器IP改为192.168.100.13
3、 配置Hostname
BigData02配置hostname为 bigdata1.com
BigData03配置hostname为 bigdata2.com
4、 配置hosts
BigData01、BigData02、BigData03三台机器hosts都配置为:
-
[hadoop@bigdata hadoop-2.7.7]$ sudo vim /etc/hosts
-
192.168.100.10 bigdata.com
-
192.168.100.12 bigdata1.com
-
192.168.100.13 bigdata2.com
5、 配置Windows上的SSH客户端
在本地Windows中的SSH客户端上添加对BigData02、BigData03机器的SSH链接。
二十六、服务器功能规划
bigdata.com | bigdata1.com | bigdata2.com |
---|---|---|
NameNode | ResourceManage | |
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
HistoryServer | SecondaryNameNode | |
二十七、在第一台机器上安装新的Hadoop
在一个新的目录/opt/modules/app下安装另外一个Hadoop。
我们采用先在第一台机器上解压、配置Hadoop,然后再分发到其他两台机器上的方式来安装集群。
6、 解压Hadoop目录:
1 | [hadoop@bigdata modules]$ tar -zxf /opt/sofeware/hadoop-2.5.0.tar.gz -C /opt/modules/app/ |
7、 配置Hadoop JDK路径修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路径:
1 | export JAVA_HOME="/opt/modules/jdk1.8.1_191" |
8、 配置core-site.xml
[hadoop@bigdata hadoop-2.7.7]$ vim etc/hadoop/core-site.xml
添加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata.com:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/app/hadoop-2.7.7/data/tmp</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/modules/app/hadoop-2.7.7/data/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/modules/app/hadoop-2.7.7/data/tmp/dfs/data</value>
</property>
</configuration>
fs.defaultFS为NameNode的地址。
hadoop.tmp.dir为hadoop临时目录的地址,默认情况下,NameNode和DataNode的数据文件都会存在这个目录下的对应子目录下。应该保证此目录是存在的,如果不存在,先创建。
9、 配置hdfs-site.xml
[hadoop@bigdata hadoop-2.7.7]$ vim etc/hadoop/hdfs-site.xml
添加:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata2.com:50090</value>
</property>
</configuration>
dfs.namenode.secondary.http-address是指定secondaryNameNode的http访问地址和端口号,因为在规划中,我们将BigData03规划为SecondaryNameNode服务器。
所以这里设置为:bigdata-senior03.chybinmy.com:50090
10、 配置slaves
[hadoop@bigdata hadoop-2.7.7]$ vim etc/hadoop/slaves
改为:
-
bigdata.com
-
bigdata1.com
-
bigdata2.com
slaves文件是指定HDFS上有哪些DataNode节点。
11、 配置yarn-site.xml
[hadoop@bigdata hadoop-2.7.7]$ vim etc/hadoop/yarn-site.xml
添加:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata1.com</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
根据规划yarn.resourcemanager.hostname
这个指定resourcemanager服务器指向bigdata-senior02.chybinmy.com
。
yarn.log-aggregation-enable
是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds
是配置聚集的日志在HDFS上最多保存多长时间。
12、 配置mapred-site.xml
从mapred-site.xml.template复制一个mapred-site.xml文件。
[hadoop@bigdata hadoop-2.7.7]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
添加:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata.com:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata.com:19888</value>
</property>
</configuration>
mapreduce.framework.name设置mapreduce任务运行在yarn上。
mapreduce.jobhistory.address是设置mapreduce的历史服务器安装在BigData01机器上。
mapreduce.jobhistory.webapp.address是设置历史服务器的web页面地址和端口号。
二十八、设置SSH无密码登录
Hadoop集群中的各个机器间会相互地通过SSH访问,每次访问都输入密码是不现实的,所以要配置各个机器间的
SSH是无密码登录的。
1、 在BigData01上生成公钥
[hadoop@bigdata hadoop-2.7.7]$ ssh-keygen -t rsa
一路回车,都设置为默认值,然后再当前用户的Home目录下的.ssh
目录中会生成公钥文件(id_rsa.pub)
和私钥文件(id_rsa)
。
2、 分发公钥
-
[hadoop@bigdata hadoop-2.7.7]$ ssh-copy-id bigdatacom
-
[hadoop@bigdata hadoop-2.7.7]$ ssh-copy-id bigdata1.com
-
[hadoop@bigdata hadoop-2.7.7]$ ssh-copy-id bigdata2.com
3、 设置BigData02、BigData03到其他机器的无密钥登录
同样的在BigData02、BigData03上生成公钥和私钥后,将公钥分发到三台机器上。
二十九、分发Hadoop文件
1、 首先在其他两台机器上创建存放Hadoop的目录
-
[hadoop@bigdata1 ~]$ mkdir /opt/modules/app
-
[hadoop@bigdata2 ~]$ mkdir /opt/modules/app
2、 通过Scp分发
Hadoop根目录下的share/doc目录是存放的hadoop的文档,文件相当大,建议在分发之前将这个目录删除掉,可以节省硬盘空间并能提高分发的速度。
-
[hadoop@bigdata hadoop-2.7.7]$ du -sh /opt/modules/app/hadoop-2.5.0/share/doc
-
1.6G /opt/modules/app/hadoop-2.5.0/share/doc
-
[hadoop@bigdata hadoop-2.7.7.]$ scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior02.chybinmy.com:/opt/modules/app
-
[hadoop@bigdata hadoop-2.7.7]$ scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior03.chybinmy.com:/opt/modules/app
三十、格式NameNode
在NameNode机器上执行格式化:
[hadoop@bigdata hadoop-2.7.7]$ bin/hdfs namenode –format
注意:
如果需要重新格式化NameNode,需要先将原来NameNode和DataNode下的文件全部删除,不然会报错,NameNode和DataNode所在目录是在core-site.xml
中hadoop.tmp.dir
、dfs.namenode.name.dir
、dfs.datanode.data.dir
属性配置的。
因为每次格式化,默认是创建一个集群ID,并写入NameNode和DataNode的VERSION文件中(VERSION文件所在目录为dfs/name/current 和 dfs/data/current),重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,不一致时会报错。
另一种方法是格式化时指定集群ID参数,指定为旧的集群ID。
三十一、启动集群
1、 启动HDFS
[hadoop@bigdata hadoop-2.7.7]$ /opt/modules/app/hadoop-2.7.7/sbin/start-dfs.sh
2、 启动YARN
[hadoop@bigdata hadoop-2.7.7]$ /opt/modules/app/hadoop-2.7.7/sbin/start-yarn.sh
在BigData02上启动ResourceManager:
[hadoop@bigdata hadoop-2.7.7]$ sbin/yarn-daemon.sh start resourcemanager
3、 启动日志服务器
因为我们规划的是在BigData03服务器上运行MapReduce日志服务,所以要在BigData03上启动。
[hadoop@bigdata2 ~]$ /opt/modules/app/hadoop-2.7.7/sbin/mr-jobhistory-daemon.sh start historyserver
-
[hadoop@bigdata2 ~]$ jps
-
3570 Jps
-
3537 JobHistoryServer
-
3310 SecondaryNameNode
-
3213 DataNode
-
3392 NodeManager
4、 查看HDFS Web页面
5、 查看YARN Web 页面
http://bigdata1.com:8088/cluster
三十二、测试Job
1、 在HDFS创建输入目录input
[hadoop@bigdata hadoop-2.7.7]$ bin/hdfs dfs -mkdir /input
2、 准备需要上传的文件,在当前文件夹下创建文件夹file
[hadoop@bigdata hadoop-2.7.7]$ mkdir file
[hadoop@bigdata hadoop-2.7.7]$ cd file
准备文件:
在文件夹file中创建两个文本文件file1.txt和file2.txt,file1.txt中内容是“hello word”,file2.txt中内容是“hello hadoop”、“hello mapreduce”(分两行)。
[hadoop@bigdata file]$ echo "hello word" > file1.txt
[hadoop@bigdata file]$ echo "hello hadoop" > file2.txt
[hadoop@bigdata file]$ vim file2.txt
[hadoop@bigdata file]$ ls
file1.txt file2.txt
3、将file*文件上传到HDFS
[hadoop@bigdata hadoop-2.7.7]$ bin/hdfs dfs -put /opt/modules/app/hadoop-2.7.7/file/file* /input
4、查看上传的文件
[hadoop@bigdata hadoop-2.7.7]$ bin/hadoop fs -ls /input
Found 2 items
-rw-r--r-- 3 hadoop supergroup 11 2018-12-12 16:20 /input/file1.txt
-rw-r--r-- 3 hadoop supergroup 29 2018-12-12 16:20 /input/file2.txt
5、运行hadoop自带的wordcount jar包(注:再次运行时一定要先将前一次运行的输出文件夹删除)
[hadoop@bigdata hadoop-2.7.7]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/file* /output
如下执行过程:
18/12/12 16:24:28 INFO client.RMProxy: Connecting to ResourceManager at bigdata1.com/192.168.100.11:8032
18/12/12 16:24:29 INFO input.FileInputFormat: Total input paths to process : 2
18/12/12 16:24:30 INFO mapreduce.JobSubmitter: number of splits:2
18/12/12 16:24:30 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1544596236139_0001
18/12/12 16:24:30 INFO impl.YarnClientImpl: Submitted application application_1544596236139_0001
18/12/12 16:24:30 INFO mapreduce.Job: The url to track the job: http://bigdata1.com:8088/proxy/application_1544596236139_0001/
18/12/12 16:24:30 INFO mapreduce.Job: Running job: job_1544596236139_0001
18/12/12 16:24:41 INFO mapreduce.Job: Job job_1544596236139_0001 running in uber mode : false
18/12/12 16:24:41 INFO mapreduce.Job: map 0% reduce 0%
18/12/12 16:24:52 INFO mapreduce.Job: map 100% reduce 0%
18/12/12 16:24:59 INFO mapreduce.Job: map 100% reduce 100%
18/12/12 16:24:59 INFO mapreduce.Job: Job job_1544596236139_0001 completed successfully
18/12/12 16:24:59 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=70
FILE: Number of bytes written=368488
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=248
HDFS: Number of bytes written=36
HDFS: Number of read operations=9
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=2
Launched reduce tasks=1
Data-local map tasks=2
Total time spent by all maps in occupied slots (ms)=18352
Total time spent by all reduces in occupied slots (ms)=3646
Total time spent by all map tasks (ms)=18352
Total time spent by all reduce tasks (ms)=3646
Total vcore-milliseconds taken by all map tasks=18352
Total vcore-milliseconds taken by all reduce tasks=3646
Total megabyte-milliseconds taken by all map tasks=18792448
Total megabyte-milliseconds taken by all reduce tasks=3733504
Map-Reduce Framework
Map input records=3
Map output records=6
Map output bytes=64
Map output materialized bytes=76
Input split bytes=208
Combine input records=6
Combine output records=5
Reduce input groups=4
Reduce shuffle bytes=76
Reduce input records=5
Reduce output records=4
Spilled Records=10
Shuffled Maps =2
Failed Shuffles=0
Merged Map outputs=2
GC time elapsed (ms)=392
CPU time spent (ms)=1750
Physical memory (bytes) snapshot=408981504
Virtual memory (bytes) snapshot=6235127808
Total committed heap usage (bytes)=259727360
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=40
File Output Format Counters
Bytes Written=36
6、 查看输出文件
[hadoop@bigdata hadoop-2.7.7]$ bin/hdfs dfs -ls /output
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2018-12-12 16:24 /output/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 36 2018-12-12 16:24 /output/part-r-00000
---------------------------------小弟初学,如有错误,还望不吝赐教!!!