Hadoop 学习之二

Hadoop 学习系列之二

企业记性选型配置

选型理念:普通的,廉价的,标准的(容易替换的),工业话大规模生产的。
Hadoop 可以自动支持多核CPU,比如选择2个四核CPU,主流主频
16-32G内存,更大的内存可以使Linux将常用的数据缓存在内存,减少IO,提高速度。
存储集群应该使用大量廉价硬盘,例如主流大容量(2T)普通SATA硬盘,出于成本考虑一般无需使用
SCSI,SAS接口类型硬盘或SSD硬盘。
网络非常重要,建议使用前兆和高带宽的交换机,但无需使用infinband这类专用设备
RAID是不需要的,可以考虑使用JBOD.RAID提供的数据的冗余容错,但Hadoop本身就提供了冗余容错的功能,所以没有必要使用RAID。


网络拓扑设计

主流构架方案使用局域网,尽量不要使用低速率的跨数据中心连接。
Hadoop支持机架感知机制。

操作系统的选择

Hadoop基于Java,因此只要能运行JVM的平台,几乎都能跑HADOOP。
32位或者64位平台均可,Hadoop没有区分位数。
操作系统主流选项是Linux,常用的发布版均可,例如CentOS,Rehat等,较新的版本均可。
Windows也可以安装Hadoop,但不建议。
很很多Apache官版之外的Hadoop发布版,例如CDH,Intel,EMC等,有和一体机融合的解决方案。
这些发布版一般比官方版本更容易安装和管理,但部分需要收费。


JDK

Java是Hadoop的原生开发语言,Hadoop本身用Java书写,主要开发语言也是Java。



--配置免密码
1.生成Key文件

[anker@anker ~]$ ssh-keygen -t rsa


[anker@anker ~]$ cd .ssh
[anker@anker .ssh]$ ls
id_rsa  id_rsa.pub  known_hosts


2.在另外一个机器上也做同样的操作

[anker@anker ~]$ ssh-keygen -t rsa


3.将生成的id_rsa.pub文件拷贝到另外一台机器上
scp ./id_rsa.pub [email protected]:/home/anker/.ssh/authorized_keys

在目标机器上查看
[anker@anker .ssh]$ ls -l
total 12
-rw-r--r--. 1 anker anker  401 Apr 12 20:27 authorized_keys
-rw-------. 1 anker anker 1671 Apr 12 20:24 id_rsa
-rw-r--r--. 1 anker anker  401 Apr 12 20:24 id_rsa.pub

需要确保权限为rw-r-r,若权限不对,需要通过chmod 644 authorized_keys来进行赋权。

4.继续上面的步骤,双方都用户对方生成的公钥文件.即可以免密码访问。



RSA算法

是一种不对称加密,它有两种秘钥,一种公钥,一种私钥。
公钥可以让全世界都知道,私钥只有持有者拥有,凡是用公钥加密的内容,都可以通过私钥来解开,
凡是私钥加密的内容,通过公钥可以解开。
公钥是推不出私钥,私钥也推不出公钥。

一般的SSH的原理

客户端向服务器端发出连接请求(注意非口令认证)
服务器端向客户端发出自己的公钥
客户端使用服务器端的公钥加密认证密码,然后发给服务器端
如果通讯过程被截获,由于qie听者即使获知公钥和经过公钥加密的内容,但不拥有
私钥依然无法解密(RSA算法).
服务器端接受到密文后,用私钥解密,获知通讯密钥,后建立了通讯。


免密码原理

客户端先为自己创建一对密钥,把公用密钥放在需要访问的服务器上。
如果要连接ssh服务器,客户端软件想服务器发出请求,请求用自己的密钥进行安全验证。
服务器端收到请求后,会随机产生一段随机的密码,这段密码称为质询,然后使用客户端的公钥进行加密,
加密之后发送给客户端。
客户端软件收到质询之后,就可以用你的私人密钥解密再把它发送到服务器。
服务器比较发送来的质问和原先是否一致,若一致就进行授权,完成建立会话的操作。

[root@localhost ~]# chkconfig --list     显示开机可以自动启动的服务
[root@localhost ~]# chkconfig --add *** 添加开机自动启动***服务
[root@localhost ~]# chkconfig --del ***   删除开机自动启动***服务


安装Hadoop


1.下载Hadoop,并解压

http://archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2-bin.tar.gz

tar -xzvf hadoop-1.1.2-bin.tar.gz


2.配置Hadoop

2.1
/conf/hadoop-env.sh(配置运行hadoop的环境变量)

--设置Java Home
export JAVA_HOME=/usr/jdk1.7.0_51

2.2
/conf/core-site.xml(配置Hadoop的核心,比如关于HDFS和MapReduce的I/O的设置)
<configuration>

<property>
<name>fs.default.name</name> --NAMENODE的位置
<value>hdfs://anker.centos1:9000</value>
</property>

<property>
<name>hadoop.tmp.dir</name>--Hadoop的临时路径,否则hadoop会使用系统的的tmp目录存放Hadoop的数据。而此目录在系统重启后会被清空
<value>/home/anker/hadoop-1.1.2/tmp</value>
</property>

<configuration>


2.3
/conf/hdfs-site.xml(配置HDFS的守护进程:namenode, secondary namenode,及datanodes)

<configuration>

<property>
<name>dfs.replication</name>--指定在hdfs的服务器因子
<value>2</value>
</property>

<configuration>

2.4
/conf/mapred-site.xml(配置MAPReduce的守护进程:jobtracker, tasktracker)

<configuration>

<property>
<name>mapred.job.tracker</name>--指定jobtracker的监听地址及端口
<value>anker.centos1:9001</value>
</property>

<configuration>

2.5

/conf/masters(充当master的服务器)
anker.centos1

2.6

/conf/slaves(充当slave的服务器)
anker.centos2
anker.centos3


3.修改host文件,包括master和slave服务器

192.168.1.107 centos1
192.168.1.109 centos2

4.关闭防火墙
service iptables stop

5.复制配置好的Hadoop到slaves节点

scp -r ./hadoop-1.1.2 [email protected]:/home/anker
--r代表将所有的子目录文件全部复制过去

6.格式化namenode,观察日志信息是否提示成功

 bin/hadoop/ namenode -format

7.配置本机的免密码设置(包括masters和slaves)

将本机的公钥内容(id_rsa.pub)拷贝到authorized_keys里面即可。

8.启动hadoop

/bin/start-all.sh

9.查看java的启动进程,包括master和slave的进程

/usr/jdk1.7.0_25/bin/jps

杀掉进程

kill -0 13439(进程号)

10.日志存放在logs文件夹里面
namenode和jobtracker的日志记录在master上面,而tasktracker及datanode是记录在slave机器上面。

http://archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2-bin.tar.gz

--安装wget
yum -y install wget




--删除目录下的所有文件
rm -rf *

scp -r ./hadoop-1.1.2 [email protected]:/home/anker

--安装Hadoop2.x

1.建立虚拟机(32位的linux)
2.安装JDK(32位的jdk)
3.编辑hosts文件
4.关闭防火墙
5.部署免密码
6.下载hadoop2.x解压
7.修改配置文件
8.分发hadoop到各个节点
9.启动集群。

Hadoop的下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.2.0/hadoop-2.2.0.tar.gz
Java的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

yarn是hadoop的第二代mapreduce,解决了第一代的缺点,提高了性能。

新建文件夹:
DATA(数据文件夹)
NAME(存放元数据,NAMENODE会用到)
TMP(临时文件夹)

要修改的配置文件
hadoop-2.2.0/etc/hadoop/hadoop-env.sh
hadoop-2.2.0/etc/hadoop/yarn-env.sh
hadoop-2.2.0/etc/hadoop/slave.sh
hadoop-2.2.0/etc/hadoop/core-site.sh
hadoop-2.2.0/etc/hadoop/hdfs-site.sh
hadoop-2.2.0/etc/hadoop/mapred-site.sh
hadoop-2.2.0/etc/hadoop/yarn-site.sh
//masters不用设置,除非secondary namenode不在同一台机器

修改配置文件,设置java home
yarn-env.sh

export JAVA_HOME=/usr/lib/j2sdk1.5-sun

修改core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://anker.centos4:9000</value>----NAMENODE的位置
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/anker/hadoop-2.2.0/tmp</value>--hadoop的临时目录,需要提前建立好
<description>Abase for other temporary directories.</description>
</property>

<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>

修改hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h1:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/grid/hadoop-2.2.0/name</value>--name目录需要提前建立好
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/grid/hadoop-2.2.0/data</value>--data目录需要提前建好
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>


修改mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>h1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>h1:19888</value>
</property>
</configuration>


修改yarn-site.xml文件
<configuration>
<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.address</name>
<value>h1:8032</value>
</property>

<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>h1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>h1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>h1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>h1:8088</value>
</property>
</configuration>


启动集群及验证
格式化namenode:./bin/hdfsnamenode–format
启动hdfs: ./sbin/start-dfs.sh
此时在h1上面运行的进程有:namenode,secondarynamenode
h2和h3上面运行的进程有:datanode
启动yarn: ./sbin/start-yarn.sh
此时在h1上运行的进程有:namenode,secondarynamenode,resourcemanager
h2和h3上面运行的进程有:datanode,nodemanager

Hadoop 2.2.0上面 nodemanager = tasktracker
resourcemanager = jobtracker



Hadoop 第三讲

第一个Hello.world程序来检验Hadoop是否安装成功

--hadoop自带的例子wordcount

[anker@anker input]$ echo "hello world" > test1.txt
[anker@anker input]$ cat test1.txt
hello world
[anker@anker input]$ echo "hello hadoop" > test2.txt
[anker@anker input]$ cat test2.txt
hello hadoop
[anker@anker ~]$ cd hadoop-1.1.2
[anker@anker hadoop-1.1.2]bin/hadoop fs -ls #查看fs文件系统下面是否存在文件

[anker@anker hadoop-1.1.2]bin/hadoop fs -put ../input in #这里的hadoop是启动jvm的一个脚本  ../input上级目录的input下的文件

[anker@anker hadoop-1.1.2]bin/hadoop fs -ls ./in/* #列出in目录下的所有内容
-rw-r--r--   2 anker supergroup         12 2014-04-25 22:46 /user/anker/in/test1.txt
-rw-r--r--   2 anker supergroup         13 2014-04-25 22:46 /user/anker/in/test2.txt

[anker@anker hadoop-1.1.2]bin/hadoop jar hadoop-examples-1.1.2.jar wordcount in out #执行jar包中的wordcount类,将输出写入到out目录中

#查看输出结果
[anker@anker hadoop-1.1.2]$ bin/hadoop fs -ls
Found 2 items
drwxr-xr-x   - anker supergroup          0 2014-04-25 22:46 /user/anker/in
drwxr-xr-x   - anker supergroup          0 2014-04-25 22:51 /user/anker/out

[anker@anker hadoop-1.1.2]$ bin/hadoop fs -ls ./out #结果放在part-r-00000文件中
Found 3 items
-rw-r--r--   2 anker supergroup          0 2014-04-25 22:51 /user/anker/out/_SUCCESS
drwxr-xr-x   - anker supergroup          0 2014-04-25 22:50 /user/anker/out/_logs
-rw-r--r--   2 anker supergroup         25 2014-04-25 22:51 /user/anker/out/part-r-00000

#查看输出结果
[anker@anker hadoop-1.1.2]$ bin/hadoop fs -cat ./out/part-r-00000
hadoop  1
hello   2
world   1


#通过web了解hadoop的活动
1.通过用浏览器和http访问jobtracker所在节点的50030端口监控jobtracker
2.通过用浏览器和http访问namenode所在节点的50070端口监控集群

http://192.168.1.201:50070/
http://192.168.1.201:50030/



重启后永久性生效:(需要root用户)
开启:chkconfig iptables on
关闭:chkconfig iptables off
(2) 即时生效,重启后失效:
开启:service iptables start
关闭:service iptables stop
--查看具体端口
 netstat -nap | grep 9000  

 

你可能感兴趣的:(hadoop)