零基础体验hadoop大数据(4)
时间:2016-10-13 09:16 来源:潇湘夜雨 作者:华嵩阳 点击:次
鉴于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) |