`

ma-hadoop集群-配置文件-进程地址端口-和hive hbase关系

 
阅读更多

 

 

0 hadoop 集群:

 

集群部署方式: 将map任务等直接运行于要处理的数据所存储的HDFS的数据节点上,

实现数据处理的本地性,进而大大提高整个过程的完成效率。

 

核心进程: 整个集群共有5类运行的核心进程,它们是MapReduce集群的JobTrackerTaskTracker,以及HDFS集群的NameNodeDataNodeSecondaryNameNode

 

工作进程: 集群中除了上述5个核心进程之外,还包含许多按需启动的任务类进程(如map任务 reduce任务)

这些构成了集群的工作进程

 

集群规模小于50个节点都属于小规模集群

   小规模下,可以将NameNode与JobTracker合并于同一个节点上运行。

 

集群主要包含内容组件: kerberos认证,HDFS文件系统,文件系统的append追加,security、YARN和HDFS联合(HDFS federation),mapreduce;

 

 

使用集群提供的应用方向:

推荐系统,金融 分析,自然语言处理,数据挖掘,影响处理,市场预测,日志分析

 

1 集群对jdk的要求:

 

hadoop基于java开发,依赖jdk,
并且Hadoop的许多功能依赖于Java 6及以后的版本才提供的特性。
http://wiki.apache.org/hadoop/HadoopJavaVersions页面给出了Hadoop目前几大著名企业实现的Hadoop集群中所使用的JDK版本,
无论如何,一个生产环境的Hadoop集群应该运行在64位的操作系统上,JDK等也要使用相应的64位版本,否则,单JVM进程将无法使用大于2GB以上的内存

 

总结就是: 安装>=1.6版本的64位jdk

 

2  集群多用户的解释:

 

在用过 cdh的hadoop集群下,会发现集群有很多用户,比如hbase用户,hbase用户,zookeeper用户,

hdfs用户,mapreduce用户等,出现这么多用户解释如下:

 

一个完整的Hadoop集群包含了MapReduce集群和HDFS集群,MapReduce集群包含JobTracker和TaskTracker两类进程和许多按需启动的任务类进程(如map任务,reduce任务),
HDFS集群包含NameNode、SecondaryNameNode和DataNode三类进程。
安全起见,应该以普通用户的身份启动这些进程,并且MapReduce集群的进程与HDFS集群的进程还应该使用不同的用户,
比如分别使用mapred和hdfs用户(cdh就是这么干的)。使用CDH的RPM包安装Hadoop时,这些用户都会被自动创建(还会创建zookeeper,sqoop,hbase等用户),
如果基于tar包安装,则需要手动创建这些用户。

 
Hadoop的每一个进程都会访问系统的各类资源,然而,Linux系统通过PAM限定了用户的资源访问能力,如可打开的文件数(默认为1024个)及可运行的进程数等,
这此默认配置在一个略具规模的Hadoop集群中均会带来问题。因此,需要为mapred和hdfs用户修改这些限制,这可以在/etc/security/limits.conf中进行。修改结果如下。

	# Allow users hdfs, mapred, and hbase to open 32k files. The

	# type '-' means both soft and hard limits.

	#

	# See 'man 5 limits.conf' for details.

	# user type resource value

	hdfs - nofile 32768

	mapred - nofile 32768

 

 

3 集群中 为什么主节点到从节点要ssh免密码登录

 

a) 方便主节点快速免密码登录子节点后,远程启动子节点上的hadoop进程

b) 并执行监控等额外的管理工作。

 

 

4 hadoop分布式模型三类型简介:

 

Hadoop通常有三种运行模式:本地(独立)模式、伪分布式(Pseudo-distributed)模式和完全分布式(Fully distributed)模式。
 
安装完成后,Hadoop的默认配置即为本地模式,此时Hadoop使用本地文件系统而非分布式文件系统,而且其也不会启动任何Hadoop守护进程,Map和Reduce任务都作为同一进程的不同部分来执行。因此,本地模式下的Hadoop仅运行于本机。此种模式仅用于开发或调试MapReduce应用程序但却避免了复杂的后续操作。
 
伪分布式模式下,Hadoop将所有进程运行于同一台主机上,但此时Hadoop将使用分布式文件系统,而且各jobs也是由JobTracker服务管理的独立进程。同时,由于伪分布式的Hadoop集群只有一个节点,因此HDFS的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序执行。
 
要真正发挥Hadoop的威力,就得使用完全分布式模式。由于ZooKeeper实现高可用等依赖于奇数法定数目(an odd-numbered quorum),因此,生产环境中,完全分布式环境需要至少三个节点。

 

 5 hadoop集群配置文件和作用:

 

hadoop-env.sh   定义java配置信息
core-site.xml   定义namenode节点和默认文件系统访问的uri地址,此文件作用于全部进程
hdfs-site.xml   定义hdfs集群属性
mapred-site.xml 定义mapreduce集群属性 主要是指定jobtracker节点
masters: 定义secondarynamenode
slaves: 定义从节点是哪些机器

 

每个文件详细说明:

hadoop-env.sh:

    用于为Hadoop指定运行时使用的JDK、各进程的JDK属性、PID文件及日志文件的保存目录等

 

 

core-site.xml:

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <configuration> 
  5.   <property> 
  6.     <name>hadoop.tmp.dir</name
  7.     <value>/hadoop/temp</value> 
  8.   </property> 
  9.    
  10.   <property> 
  11.     <name>fs.default.name</name
  12.     <value>hdfs://master:9000</value> 
  13.   </property>   
  14. </configuration> 

 

hadoop.tmp.dir: 存放  MAP任务的中间数据 名称空间镜像 和 编辑日志,默认为/tmp/hadoop-${username}

 要保证运行Hadoop进程的用户对其具有全部访问权限。

fs.default.name: 指定NameNode的RPC服务器监听的地址,默认端口是8020, 定义HDFS的名称节点和其默认的文件系统

 

 

hdfs-site.xml:

HDFS集群进程有许多属性可以定义其工作路,比如

dfs.block.size

<property>
  <name>dfs.block.size</name>
  <value>67108864</value>  64M
  <description>The default block size for new files.</description>
</property>

 

dfs.name.dir属性定义的HDFS元数据持久存储路径默认为${hadoop.tmp.dir}/dfs/name

fs.data.dir属性定义的DataNode用于存储数据块的目录路径默认为${hadoop.tmp.dir}/dfs/data

fs.checkpoint.dir属性定义的SecondaryNameNode用于存储检查点文件的目录默认为${hadoop.tmp.dir}/dfs/namesecondary

 

dfs.replication 定义副本个数

如下为最简单的写法:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <configuration> 
  5.   <property> 
  6.     <name>dfs.replication</name
  7.     <value>1</value> 
  8.   </property> 
  9. </configuration> 

 

 

 

 mapred-site.xml:

 其下主要配置参数:

mapred.job.trakcer:

JobTracker监听的地址(或主机名)和端口(默认为8021),与前面的fs.default.name属性的值不同的是,
这不是一个URI,而仅一个“主机-端口”组

 

 mapred.local.dir: 用于指定MapReduce作业运行过程中的中间数据,这个目录一定要很大,
默认值为${hadoop.tmp.dir}/mapred/local 

mapred.job.tracker可以接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上,
因此指定位于不同磁盘上的多个文件系统路径可以分散数据I/O

mapred.system.dir: 各TaskTracker保存共享数据的路径, 默认值为${hadoop.tmp.dir}/mapred/system

 

 

简答写法:

  1. <?xml version="1.0"?> 
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  3.  
  4. <configuration> 
  5.   <property> 
  6.     <name>mapred.job.tracker</name
  7.     <value>master:8021</value> 
  8.   </property> 
  9. </configuration> 

 

 

 

上述配置文件下路径的总结:

 

{hadoop.tmp.dir} ---> core-site.xml配置,定义了 数据存储节点 mapreduce中间处理数据存放位置  名称节点image edit的路径,如下图:


 

6 启动命令  start-dfs.sh   start-mapred.sh    start-all.sh hadoop-daemon.sh 的区别

 

使用这类脚本启动Hadoop集群,其需要当前主机的当前用户能够通过ssh服务以基于密钥认证的方式访问任何一个从节点.

 

在NameNode和JobTracker运行于同一主机的场景中时,start-all.sh等效于 start-dfs.sh start-mapred.sh

 

hadoop-daemon.sh: 用于集群不停止下,动态增加/删除节点,做法如下

.动态的增加一个hadoop节点  
    2.1 配置新节点的环境(eg:机器名 jdk hadoop ssh 机器名和ip对应关系)  
    2.2 把新节点的hostname配置到主节点的slaves文件中  
    2.3 在新节点,启动进程  
            hadoop-daemon.sh start datanode  
            hadoop-daemon.sh start tasktracker  
    2.4 在主节点执行脚本 hadoop dfsadmin -refreshNodes   通知nomenode(通知老大我来了) 

 

 

7 集群进程监听的地址和端口

 

Hadoop启动时会运行两个服务器进程,一个为用于Hadoop各进程之间进行通信的RPC服务器,
另一个是提供了便于管理员查看Hadoop集群各进程相关信息页面的HTTP服务器。

 

用于定义各RPC服务器所监听的地址和端口的属性有如下几个:
fs.default.name:定义HDFS的NameNode用于提供URI所监听的地址和端口,默认端口为8020;
dfs.datanode.ipc.address:DataNode上RPC服务器监听的地址和端口,默认为0.0.0.0:50020;

mapred.job.tracker:JobTracker的PRC服务器所监听的地址和端口,默认端口为8021;
mapred.task.tracker.report.address:TaskTracker的RPC服务器监听的地址和端口;TaskTracker的子JVM使用此端口与TaskTracker进行通信,
它仅需要监听在本地回环地址127.0.0.1上,因此可以使用任何端口;只有在当本地没有回环接口时才需要修改此属性的值;

除了RPC服务器之外,DataNode还会运行一个TCP/IP服务器用于数据块传输,
其监听的地址和端口可以通过dfs.datanode.address属性进行定义,默认为0.0.0.0:50010。

 

可用于定义各HTTP服务器的属性有如下几个:
mapred.job.tracker.http.addrss:JobTracker的HTTP服务器地址和端口,默认为0.0.0.0:50030;
mapred.task.tracker.http.address:TaskTracker的HTTP服务器地址和端口,默认为0.0.0.0:50060;
dfs.http.address:NameNode的HTTP服务器地址和端口,默认为0.0.0.0:50070;
dfs.datanode.http.address:DataNode的HTTP服务器地址和端口,默认为0.0.0.0:50075;
dfs.secondary.http.address:SecondaryNameNode的HTTP服务器地址和端口,默认为0.0.0.0:50090

 

上述端口,感觉如下4个更有用

1 8020     namenode的rpc端口 在core-site.xml设置
2 8021     jobtracker的rpc监听端口 在mapred-site.xml设置
3 50070    namenode的http服务器端口
4 50030    jobtracker的http服务器端口

 

 

8  和hive  hbase  cdh  avro  R mahout 关系

 

hadoop 编写map-reduce代码增加了入行门槛

 

hive: facebook产品让 mapreduce不在是贵族产品 走向了千家万户,但是依旧不能实时
hive能否修改数据? ----> hdfs不支持修改数据因此hive依旧不支持修改数据

hive总结一句话: hive是构建在mapreduce上以类SQL方式提供的降低入行大数据的一个工具,不支持修改hdfs文件

 

hbase: 可以当然也可以不构建在hdfs上,但是一般他就是设计成构建在hdfs上的
hbase能够在原有的hdfs集群上在安装一个控制节点,同时在每一个hdfs节点上提供一个进程(hbase工作进程)
hbase工作进程是说数据别直接在hdfs上存,而是存在hbase中,hbase决定怎么存在hdfs上,hbase此时就成了hdfs
的客户端,hbase自己知道怎么和hdfs交互,以及把数据存在哪些节点上,更重要的是基于hbase能实现数据的修改。
hbase以类似表的形式让你能够随时插入数据,修改,删除数据,但是hbase不是RDBMS(关系型数据库) 而是稀疏格式的
nosql存储方案,有行的概念,列数不固定,并且多版本,并且不支持事务。
因此有了 hbase之后,hadoop也能支持数据修改了,只不过不是实时的。
如果用到事务,同时是海量数据处理,支持一些简单操作的时候,nosql是非常优良的解决方案。

 

hbase总结一句话: hbase是构建在hdfs上的支持动态插入,修改,删除hdfs数据的一套机制,是nosql列数据库

 

 

CDH: cloudear发布的hadoop生态,全称是cloudera distribute include hadoop,
包含三个产品: cdh(集群)  cloudera manager(安装集群和管理集群的界面)  cloudear support(技术支持)
将hadoop作者吸收过去做了股东和技术顾问,并且负责将各个生态
的子版本兼容调制好后整合在一起发布出来, 目前给hadoop社区上给hadoop贡献最多的依旧是Yahoo

 

mahout:  hadoop集群的处理结果拿来作为机器智能学习

 

R: 工作在hadoop集群上 利用hadoop的处理能力实现数据统计和分析 (统计领域实现编程的基本都在使用)

 

avro : 数据序列化系统   hadoop原作者主导开发的一套系统
不能序列化的数据将无法通过网络发送,集群中传送数据,必须是序列化的数据能够发送,到达目的地后能合并回来    avro是hadoop针对google的(protocol buffer 序列反序列功能)所做的的实现。

 

 

  

 

 

 

 

 

 

  • 大小: 153 KB
  • 大小: 5.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics