文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

Hadoop Mac搭建【原创】  


brew install hadoop

/usr/local/Cellar/hadoop/2.3.0/

hadoop version
bin/hadoop namenode -format
bin/start-all.sh

http://importantfish.com/how-to-install-hadoop-on-mac-os-x/




cd /usr/local/Cellar/hadoop/2.3.0/libexec

bin/hadoop namenode -format
bin/hadoop datanode -format *

/usr/local/Cellar/hadoop/2.3.0/libexec/sbin

Hadoop logs: /usr/local/Cellar/hadoop/1.1.2/libexec/logs/
Web interface for Hadoop NameNode: http://localhost:50070/
Web interface for Hadoop JobTracker: http://localhost:50030/

jps
$ bin/hadoop jar /usr/local/Cellar/hadoop/1.1.2/libexec/hadoop-examples-1.1.2.jar pi 10 100

/usr/local/Cellar/hadoop/2.3.0/libexec/etc/hadoop
vim hdfs-site.xml 
sh-3.2# vim mapred-site.xml
vim mapred-site.xml

/usr/local/Cellar/hadoop/2.3.0/libexec/share/hadoop/mapreduce
hadoop jar  hadoop-mapreduce-examples-2.2.0.jar pi 10 10
hadoop jar hadoop-mapreduce-examples-2.3.0.jar pi 10 10
/tmp/hadoop-root/dfs/name
http://172.22.184.11:8088/cluster/nodes

Flume Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Kafka Kafka是一个高吞吐量分布式消息系统。linkedin开源的kafka。ElasticSearch ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。Storm Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.8.0,基本是用Clojure写的。Zookeeper ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。RedisMySQLHive hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hbase HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
第一步:统一所有数据格式,统计平台的渠道分类;
第二步:确定统计架构设计方案;
第三步: 开始搞。

http://www.corbettworks.net/blog/2013/02/07/how-to-install-hadoop-on-a-macbook/
http://kuring.farbox.com/post/hadoop_setup
本文选择安装的hadoop版本为网上资料较多的0.20.2,对于不懂的新技术要持保守态度。遇到问题解决问题的痛苦远比体会用不着功能的新版本的快感来的更猛烈。

安装环境
本文选择了三台机器来搭建hadoop集群,1个Master和2个Slave。本文中的master主机即namenode所在的机器,slave即datanode所在的机器。节点的机器名和IP地址如下
机器名 IP地址 用途 运行模块
server206 192.168.20.6 Master NameNode、JobTracker、SecondaryNameNode
ap1 192.168.20.36 Slave DataNode、TaskTracker
ap2 192.168.20.38 Slave DataNode、TaskTracker
安装Java
检查本机是否已安装Java 在命令行中输入java -version判断是否已经安装。如果已经安装检查Java的版本,某些操作系统在安装的时候会安装Jdk,但可能版本会太低。如果版本过低,需要将旧的版本删除。在Redhat操作系统中可以通过rpm命令来删除系统自带的Jdk。
安装java 本文选择jdk1.6安装,将解压出的文件夹jdk1.6.0_10复制到/usr/java目录下。
设置java的环境变量添加系统环境变量,修改/etc/profile文件,在文件末尾添加如下内容:
export JAVA_HOME=/usr/java/jdk1.6.0_10export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH=$JAVA_HOME/bin:$PATHexport JRE_HOME=$JAVA_HOME/jre
修改完profile文件后要执行source /etc/profile命令才能使刚才的修改在该命令行环境下生效。
检查java是否安装成功在命令行中输入java -version、javac命令来查看是否安装成功及安装版本。
配置hosts文件
本步骤必须操作,需要root用户来操作,修改完成之后立即生效。在三台机器的/etc/hosts文件末尾添加如下内容:
192.168.20.6 server206192.168.20.36 ap1192.168.20.38 ap2
修改完成之后可以通过ping 主机名的方式来测试hosts文件是否正确。
新建hadoop用户
在三台机器上分别新建hadoop用户,该用户的目录为/home/hadoop。利用useradd命令来添加用户,利用passwd命令给用户添加密码。
配置SSH免登录
该步骤非必须,推荐配置,否则在Master上执行start-all.sh命令来启动hadoop集群的时候需要手动输入ssh密码,非常麻烦。原理:用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求输入密码。在本例中,需要实现的是192.168.20.6上的hadoop用户可以无密码登录自己、192.168.20.36和192.168.20.38的hadoop用户。需要将192.168.20.6上的ssh公钥复制到192.168.20.36和192.168.20.38机器上。1. 在192.168.20.6上执行ssh-keygen –t rsa命令来生成ssh密钥对。会在/home/hadoop/.ssh目录下生成id_rsa.pub和id_rsa两个文件,其中id_rsa.pub为公钥文件,id_rsa为私钥文件。2. 在192.168.20.6上执行cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys命令将公钥添加到授权的key里。3. 权限设置。在192.168.20.6上执行chmod 600 ~/.ssh/authorized_keys来修改authorized_keys文件的权限,执行chmod 700 ~/.ssh命令将.ssh文件夹的权限设置为700。如果权限不对无密码登录就配置不成功,而且没有错误提示,这一步特别注意。4. 在本机上测试是否设置无密码登录成功。在192.168.20.6上执行ssh -p 本机SSH服务端口号 localhost,如果不需要输入密码则登录成功。5. 利用scp命令将192.168.20.6上的公钥文件id_rsa.pub追加到192.168.20.36和192.168.20.38机器上的~/.ssh/authorized_keys文件中。scp命令的格式如下:
scp -P ssh端口号 ~/.ssh/id_rsa.pub hadoop@192.168.20.36:~/id_rsa.pub
在192.168.20.36和192.168.20.38机器上分别执行cat ~/id_rsa.pub >> ~/.ssh/authorized_keys命令将192.168.20.6机器上的公钥添加到authorized_keys文件的尾部。6. 配置无密码登录完成,在Master机器上执行ssh -P 本机SSH服务端口号 要连接的服务器IP地址命令进行测试。
搭建单机版hadoop
在192.168.20.6上首先搭建单机版hadoop进行测试。1. 将hadoop-0.20.2.tar.gz文件解压到hadoop用户的目录下。2. 配置hadoop的环境变量。修改/etc/profile文件,在文件的下面加入如下:
HADOOP_HOME=/home/hadoop/hadoop-0.20.2export HADOOP_HOMEexport HADOOP=$HADOOP_HOME/binexport PATH=$HADOOP:$PATH
修改完成之后执行source /etc/profile使修改的环境变量生效。3. 配置hadoop用到的java环境变量修改conf/hadoop-env.sh文件,添加export JAVA_HOME=/usr/java/jdk1.6.0_10。4. 修改conf/core-site.xml的内容如下:
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value> 
    </property>

    <property>
        <name>dfs.replication</name> 
        <value>1</value> 
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-0.20.2/tmp</value> 
    </property>
</configuration>
修改/conf/mapred-site.xml的内容如下: <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
至此单击版搭建完毕。可以通过hadoop自带的wordcount程序测试是否运行正常。下面为运行wordcount例子的步骤。
在hadoop目录下新建input文件夹。
将conf目录下的内容拷贝到input文件夹下,执行cp conf/* input
通过start-all.sh脚本来启动单机版hadoop。
执行wordcount程序:hadoop jar hadoop-0.20.2-examples.jar wordcount input output
通过stop-all.sh脚本来停止单机版hadoop。
搭建分布式hadoop
在上述基础之上,在192.168.20.6上执行如下操作。1. 修改/home/hadoop/hadoop-0.20.2/conf目录下的core-site.xml文件。
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://192.168.20.6:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-0.20.2/tmp</value>
    </property>
</configuration>
如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。2. 修改/home/hadoop/hadoop-0.20.2/conf目录下的hdfs-site.xml文件。
<configuration>
    <property>
            <name>dfs.replication</name>
            <value>1</value>
    </property>
    <property>
            <name>dfs.support.append</name>
            <value>true</value>
    </property>
</configuration>
3. 修改/home/hadoop/hadoop-0.20.2/conf目录下的mapred-site.xml文件。
<configuration>
    <property>
            <name>mapred.job.tracker</name>
            <value>http://192.168.20.6:9001</value>
    </property>
</configuration>
4. 修改/home/hadoop/hadoop-0.20.2/conf目录下的masters文件。将Master机器的IP地址或主机名添加进文件,如192.168.20.6。5. 修改/home/hadoop/hadoop-0.20.2/conf目录下的slaves文件。Master主机特有在其中将slave节点的Ip地址或主机名添加进文件中,本例中加入
192.168.20.36
192.168.20.38
6. hadoop主机的master主机已经配置完毕,利用scp命令将hadoop-0.20.2目录复制到两台slave机器的hadoop目录下。命令为:scp -r /home/hadoop hadoop@服务器IP:/home/hadoop/。注意slaves文件在master和slave机器上是不同的。
常用命令
hadoop dfsadmin -report 查看集群状态
http://192.168.20.6:50070/dfshealth.jsp 查看NameNode状态
http://192.168.20.6:50030/jobtracker.jsp Map/Reduce管理
hadoop fs -mkdir input 在HDFS上创建文件夹
hadoop fs -put ~/file/file*.txt input 将文件放入HDFS文件系统中