潇湘夜雨移动版

主页 > 系统 > 大数据 >

零基础体验hadoop大数据(4)


鉴于Hive本身的限制,如果期望在大数据集上实现OLTP式的特性,就得认真考虑NoSQL数据库了,比如HBase、Cassandra和DynamoDB等。
Namenodes彼此间是联合(federated)关系,因此各节点均是独立的。对于Namenodes来说,Datanodes就像是普通的块设备,它们需要在各Namenodes注册后才能使用,同时Datanodes则周期性地向Namenodes发送心跳信息、数据块的使用情况,并负责响应来自Namenodes的各种命令。
Block pool:
隶属于同一个Namenodes的所有数据块的集合称作“块池”。为了便于Namespace为新加入到当前Namespace的中块分派Block ID,不同的块池被设计为彼此间相互独立,这样每个Namespace选择Block ID无须与其它的Namenodes进行协调,同时,任何namenode故障也会影响到datanodes向其它namenodes提供服务。
Namespace和其块池组合起来称作Namespace卷——一个自包含的管理单元。当删除一个Namenode/Namespace时,与之相关的块池亦会从datanode上删除。同时,当集群升级时,namespace卷也被当作一个独立的单元进行升级。
ClusterID
ClusterID用于标识隶属于某集群的所有节点,任何一个新的namenode在格式化时,集群会自动将当前集群的ClusterID标识于此节点。
优势:
Namespace Scalability —— HDFS集群存储进行水平伸缩时namespace不受影响,因此,部署大型HDFS集群或将HDFS集群用于海量小文件时,可通过简单的添加节点对集群进行扩展。
Performance —— HDFS文件系统的吞吐能力取决于namende,因此,单一namenode很容易成为整个系统性能的瓶颈;而多namenode便于扩展系统性能。
Isolation ——
 
二、安装配置hadoop:
 
总体思路,准备主从服务器,配置主服务器可以无密码SSH登录从服务器,解压安装JDK,解压安装Hadoop,配置hdfs、mapreduce等主从关系。
 
1、环境,3台CentOS6.7,64位,Hadoop2.7需要64位Linux.
172.18.109.235 hadoop-master
172.18.109.236 hadoop1
172.18.109.237 hadoop2
 
2、SSH免密码登录,因为Hadoop需要通过SSH登录到各个节点进行操作,我用的是root用户
(1)CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置,
#RSAAuthentication yes
#PubkeyAuthentication yes
(2)输入命令,ssh-keygen -t rsa,生成key,都不输入密码,一直回车,/root就会生成.ssh文件夹,每台服务器都要设置,
[root@hadoop-master ~]#ssh-keygen -t rsa -f ~/.ssh/id_rsa
(3)将这个包含了所有互信机器认证key的认证文件,分发到各个机器中去;
[root@hadoop-master ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.18.109.236
[root@hadoop-master ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.18.109.237
(4)验证互信
这里验证时顺便把时间同步了
[root@hadoop-master ~]#ssh hadoop1 ntpdate 133.243.238.243
[root@hadoop-master ~]#ssh hadoop2 ntpdate 133.243.238.243
认证成功后可以直接在master节点无密码登录到其它节点
 
3、安装JDK,Hadoop2.7需要JDK7,直接解压下载的JDK并配置变量即可
所有节点都要安装JDK
(1)下载“jdk-7u79-linux-x64.gz”,放到/home/java目录下
(2)解压,输入命令,tar -zxvf jdk-7u79-linux-x64.gz
(3)编辑/etc/profile
export JAVA_HOME=/home/java/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
(4)使配置生效,输入命令,source /etc/profile
(5)输入命令,java -version,完成
注意:jdk的安装方式有多种,也可以用yum安装,简单方便,但是在生产环境中建议用源码安装,以免版本过低或版本是精简版。
 
4、安装Hadoop2.7,只在Master服务器解压,再复制到Slave服务器
 
(1)下载“hadoop-2.7.0.tar.gz”
(2)解压,输入命令
tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local/
 
(3)在 /usr/local/hadoop目录下创建数据存放的文件夹,tmp、hdfs、hdfs/data、hdfs/name
[root@hadoop-master local]# mv hadoop-2.7.3/ hadoop
[root@hadoop-master local]# cd hadoop/
[root@hadoop-master hadoop]# ls
bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share
[root@hadoop-master hadoop]# mkdir tmp hdfs
[root@hadoop-master hadoop]# ls
bin  etc  hdfs  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share  tmp
[root@hadoop-master hadoop]# mkdir hdfs/date hdfs/name
[root@hadoop-master hadoop]# ls hdfs/
date  name
 
 
5、配置/usr/local/hadoop/etc/hadoop目录下的core-site.xml,配置Hadoop的核心属性。
 
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.18.109.235:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
上面示例中hadoop.tmp.dir属性用于定义Hadoop的临时目录,其默认为/tmp/hadoop-${username}。
HDFS进程的许多目录默认都在此目录中,本示例将其定义到了/hadoop/temp目录,需要注意的是,
要保证运行Hadoop进程的用户对其具有全部访问权限。fs.default.name属性用于定义HDFS的名称
节点和其默认的文件系统,其值是一个URI,即NameNode的RPC服务器监听的地址(可以是主机名)
和端口(默认为8020)。其默认值为file:///,即本地文件系统。
 
6、配置/usr/local/hadoop/etc/hadoop目录下的hdfs-site.xml,定义hdfs的属性。
HDFS进程有许多属性可以定义其工作路,如dfs.name.dir属性定义的HDFS元数据持久
存储路径默认为${hadoop.tmp.dir}/dfs/name、dfs.data.dir属性定义的DataNode用于存
储数据块的目录路径默认为${hadoop.tmp.dir}/dfs/data、fs.checkpoint.dir属性定义的
SecondaryNameNode用于存储检查点文件的目录默认为${hadoop.tmp.dir}/dfs/namesecondary。
为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。
而只有一个节点的伪分布式环境中其仅用保存一个副本即可,这可以通过dfs.replication属性进行定义。
如下所示的内容即可作为最简单的hdfs-site.xml配置文件。
 
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>172.18.109.235:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
 
 
7、配置/usr/local/hadoop/etc/hadoop目录下的mapred-site.xml,定义MapReduce。
运行MapReduce需要为其指定一个主机作为JobTracker节点,在一个小规模的Hadoop集群中,它通常跟
NameNode运行于同一物理主机。可以通过mapred.job.trakcer属性定义JobTracker监听的地址(或主机名)
和端口(默认为8021),与前面的fs.default.name属性的值不同的是,这不是一个URI,而仅一个“主机-端口”组合。
在MapReduce作业运行过程中,中间数据(intermediate data)和工作文件保存于本地临时文件中。根据运行
的MapReduce作业不同,这些数据文件可能会非常大,因此,应该通过mapred.local.dir属性为其指定一个
有着足够空间的本地文件系统路径,其默认值为${hadoop.tmp.dir}/mapred/local。mapred.job.tracker可以
接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上,因此指定
位于不同磁盘上的多个文件系统路径可以分散数据I/O。
另外,MapReduce使用分布式文件系统为各TaskTracker保存共享数据,这可以通过mapred.system.dir属性
进行定义,其默认值为${hadoop.tmp.dir}/mapred/system。下面给出了一个较简单的mapred-site.xml文件示例。
 
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>172.18.109.235:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>172.18.109.235:19888</value>
</property>
</configuration>
 
 
8、配置/usr/local/hadoop/etc/hadoop目录下的yarn-site.xml,定义nodemanager属性。 (责任编辑:liangzh)