1、Hadoop配置
1、配置hadoop-env.sh
添加JAVA_HOME信息,如:
export JAVA_HOME=/usr/java/jdk1.6
2、配置core-site.xml
参数:fs.default.name
作用:指定NameNode的IP地址和端口(端口可以修改)
注意:如果是完全分布式节点,localhost应改为该主机的IP和端口
如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
3、配置hdfs-site.xml
参数:dfs.data.dir(指定数据节点在集群中存放数据的目录)
注意:存放目录由自己决定,目录是预先建好的。
参数:dfs.replication(指数据块在集群中的副本数,即备份数)
如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/usr/hadoop-1.1.2/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4、配置mapred-site.xml
参数:mapred.job.tracker(指定作业跟踪器的IP和端口,默认9001,可以修改)
注意:如果是完全分布式节点,localhost应改为该主机的IP和端口
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
2、生成ssh密钥对
1、用户:root
1)cd /root
2)ssh-keygen -t rsa
注意:rsa或dsa是一种解密算法,公钥加密,私钥解密,如:给当前服务器的root用户创建一对秘钥,一个是公钥,一个是私钥,两个秘钥是不对称的,公钥是对外公开的,可以让其它服务器得到该公钥,其它服务器可以使用该公钥对数据或要传输的内容进行加密,然后传递给该服务器,该服务器再用私钥进行解密。
3)在root目录下,cd .ssh(隐藏目录),文件如下:
密钥对:id_rsa(私钥),id_rsa.pub(公钥)
4)执行命令:
cp id_rsa.pub authorized_keys
5)authorized_keys
存放了对外公开的公钥,其它服务器就会根据authorized_keys
记录的公钥来免密码连接该服务器
3、完全分布式安装和配置
1、配置hosts文件
对集群中的主机名进行解析(把对方的主机名解析为IP地址)
所有的节点都修改/etc/hosts,
使彼此之间都能把主机名解析为ip
2、建立hadoop运行账号
建议不使用root用户,每个节点单独建一个hadoop的运行账号
3、配置ssh免密码登录
每个节点都使用hadoop的运行账号(主目录下)生成公钥和私钥
把各个节点的authorized_keys的内容互相拷贝加入到对方的此文件中
然后就可以免密码彼此ssh连入
4、下载并解压hadoop安装包
5、配置namenode,修改site文件
6、配置hadoop-env.sh
指定JAVA_HOME目录
7、配置masters和slaves文件
修改masters文件(主节点):
如:192.168.1.10 h1(主机名)
在masters文件中添加内容:h1
修改slaves文件(从节点):
如:192.168.1.12 h2(主机名)
在slaves文件中添加内容:h2
注意:一个主机名在一行
8、向各节点赋值hadoop
scp命令(是ssh套件的一个运用程序,可以跨节点拷贝文件)
注意:如果之前没有配置ssh免密码登录,使用scp时需要账号和密码
如(主机名:h2、h3,用户:grid):
scp -r ./hadoop-1.1.2 h2:/home/grid
scp -r ./hadoop-1.1.2 h3:/home/grid
给每一个节点拷贝一份即可
注意:先在一台机上配置好hadoop后,然后再拷贝到各个节点。
9、格式化namenode
伪分布和完全分布的做法一样
cd hadoop-1.1.2/bin/
hadoop namenode -fromat
格式化名称节点:
在名称节点上建立一系列的结构,用来存放整个hdfs元数据。
10、启动hadoop
start-all.sh
stop-all.sh
11、用jps检验各后台进程是否成功启动
运行命令:
/usr/java/jdk1.6/bin/jps
4、hdfs基础原理
Namenode
(1)管理文件系统的命名空间
(2)记录每个文件数据块在各个Datanode上的位置和副本信息
(3)协调客户端对文件的访问
(4)记录命名空间内的改动或空间本身属性的改动
(5)Namenode使用事务日志记录HDFS元数据的变化。
使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
Datanode
(1)负责所在物理节点的存储管理
(2)一次写,多次读取(不修改)
(3)文件由数据块组成,典型的块大小是64MB
(5)数据块尽量散布到各个节点
(6)Datanode启动时,遍历本地文件系统,产生一份hdfs
数据块和本地文件的对应关系列表(blockreport)汇报给namenode。
5、hdfs文件操作命令
hdfs文件操作--命令行
(1)显示文件
当前用户目录:hadoop fs -ls
根目录:hadoop fs -ls /
hdfs没有当前目录的概念
(2)上传文件
hadoop fs -put src dst
src:linux中的文件或目录
dst:hdfs中的目录
(3)下载文件
hadoop fs -get src dst
src:hdfs中的将文件或目录
dst:linux中的目录
(4)删除文件
递归删除:hadoop fs -rmr file
(5)查看文件内容
hadoop fs -cat file
hadoop fs -text file
(6)查看hdfs基本统计信息
hadoop dfsadmin -report
(7)进入和退出安全模式
hdfs在启动时进入安全模式,每个Datanode节点会检查数据块的状况,并生成数据块映像的报告发给Namenode,Namenode根据报告检测数据块是否处于安全状态,通过判断如果数据块副本数达到阈值,则为安全状态,只有当安全状态的数据快达到一定比例之后,才会退出安全模式。进入安全模式可以检查数据块的安全状态。
进入:hadoop dfsadmin -safemode enter
退出:hadoop dfsadmin -safemode leave
(8)数据负载均衡
节点出现故障,或新增加节点时,数据块分布可能不均匀,负载均衡可以重新平衡各个Datanode上数据块的分布。
start-balancer.sh
Hadoop相关子项目
Pig:
1、Hadoop客户端
2、使用类似于SQL的面向数据流的语言PigLatin
3、Pig Latin可以完成排序,过滤,求和,聚组,关联等操作,可以支持自定义函数
4、Pig自动把Pig Latin映射为Map-Reduce作业上传到集群运行,减少用户编写java程序的苦恼
5、三种运行方式:Grunt shell,脚本方式,嵌入式
Hbase:
1、Google Bigtable的开源实现
2、列式数据库
3、可集群化
4、可以使用shell、web、api等多种方式访问
5、适合高读写(insert)的场景
6、HQL查询语言
7、NoSQL的典型代表产品
Hive:
1、数据仓库工具。可以把hadoop下的原始结构化数据变成Hive中的表
2、支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新、索 引和事务,几乎SQL的其它特征都能支持
3、可以看成是从SQL到Map-Reduce的映射器
4、提供shell、JDBC/ODBC、Thrift、Web等接口
Zookeeper:
1、Google Chubby的开源实现
2、用于协调分布式系统上的各种服务。例如确认消息是否准确到达,防止单点失效,处理负载均衡等
3、应用场景:Hbase,实现Namenode自动切换
4、工作原理:领导者,跟随者以及选举过程
Sqoop:
1、用于在Hadoop和关系型数据库之间交换数据
2、通过JDBC接口连入关系型数据库
Avro:
1、数据序列化工具,由Hadoop的创始人Doug Cutting主持开发
2、用于支持大批量数据交换的应用。支持二进制序列化方式,可以便捷,快速地处理大量数据
3、动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据
4、Thrift接口
Chukwa:
1、架构在Hadoop之上的数据采集与分析框架
2、主要进行日志采集和分析
3、通过安装在收集节点的“代理”采集最原始的日志数据
4、代理将数据发给收集器
5、收集器定时将数据写入Hadoop集群
6、指定定时启动的Map-Reduce作业队数据进行加工处理和分析
7、Hadoop基础管理中心(HICC)最终展示数据
Cassandra:
1、NoSQL,分布式的Key-Value型数据库,有Facebook贡献
2、与Hbase类似,也是借鉴Google Bigtable的思想体系
3,、只有顺序写,没有随机写的设计,满足高负荷情形的性能需求