`
字符串
  • 浏览: 36301 次
文章分类
社区版块
存档分类
最新评论

在amazon EC2上搭建hadoop搭建hbase

 
阅读更多

一、amazon ec2 环境

申请4台VPC(virtual private cloud),在一个security group下,ubuntu 12.04.4。
1台m3.large,cpu 2.5GHz双核,7G内存,30G分区在/mnt 下,这台机器用来当NameNode。
3台m1.large,cpu 1.8GHz双核,7G内存,400G分区在/mnt 下,这3台机器用来当DataNode。

二、编译打包hadoop-2.4.0和hbase-0.98.1

因为apache发布的hadoop里面的native的library是32位的,所以就自己编译了,编译过程遇到很多问题,google解决了,下面就不贴出错误信息,直接写正确的步骤。
因为缺少java环境,所以下载安装了jdk-7u51的包 jdk-7u51-linux-x64.tar.gz,自己写一段脚本debian_set_java.sh 来安装:
#!/bin/bash

if [ `whoami` != "root" ]; then
echo "Use root to set java environment."
exit 1
fi
if [ `uname` == 'Darwin' ]; then
echo "Darwin system."
exit 1
fi

function unpack_java()
{
mkdir /usr/local/java
tar -pzxf $1 -C /usr/local/java/
if [ `echo $?` != 0 ]; then
echo "untar file failed."
exit 1
fi
echo "unpack $1 done"
}

function set_j8_env()
{
cp -p /etc/profile /tmp/profile.bak_`date "+%Y%m%d%H%M%S"`
sed -i '$a \\nJAVA_HOME=/usr/local/java/jdk1.8.0\nPATH=$PATH:$JAVA_HOME/bin\nexport JAVA_HOME\nexport PATH'/etc/profile
source /etc/profile
update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0/bin/javac  95
update-alternatives --install /usr/bin/java  java  /usr/local/java/jdk1.8.0/bin/java  95
update-alternatives --config java
echo "set java 8 environment done"
}

function set_j7_env()
{
cp -p /etc/profile /tmp/profile.bak_`date "+%Y%m%d%H%M%S"`
sed -i '$a \\nJAVA_HOME=/usr/local/java/jdk1.7.0_51\nPATH=$PATH:$JAVA_HOME/bin\nexport JAVA_HOME\nexport PATH'/etc/profile
source /etc/profile
update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.7.0_51/bin/javac  95
update-alternatives --install /usr/bin/java  java  /usr/local/java/jdk1.7.0_51/bin/java  95
update-alternatives --config java
echo "set java 7 environment done"
}

unpack_java $1
set_j7_env

bash debian_set_java.sh jdk-7u51-linux-x64.tar.gz
安装好java7环境,我们正式开始编译打包。

1.Hadoop Compile
apt-get install protobuf-compiler
$ protoc
version == 2.4.1
因为需要protobuf版本>2.5.0,所以从官网下载并编译安装,编译先装编译器。
sudo apt-get install g++ make
wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
tar jxvf protobuf-2.5.0.tar.bz2
cd protobuf-2.5.0; ./configure --prefix=/usr/local; make
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

编译的时候会引用${FINDBUGS_HOME}变量
wget http://jaist.dl.sourceforge.net/project/findbugs/findbugs/2.0.3/findbugs-2.0.3.tar.gz
tar zxvf findbugs-2.0.3.tar.gz
export FINDBUGS_HOME=/home/ubuntu/findbugs-2.0.3
export PATH=$PATH:${FINDBUGS_HOME}/bin

编译hadoop和hbase要用maven,先安装编译打包依赖:
sudo apt-get install maven cmake zlib1g-dev libssl-dev
mvn package -Pdist,native,docs,src -DskipTests -Dtar
执行过程中会报错`hadoop-hdfs/target/findbugsXml.xml does not exist`,去掉docs继续编译:
mvn package -Pdist,native,src -DskipTests -Dtar

差不多半个小时,编译目录有2.6G大小,得到打包文件
hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0.tar.gz


2.Hbase Compile
hbase-0.98.1/pom.xml 文件修改hadoop版本 2.2.0 -> 2.4.0
mvn clean package -DskipTests
但是没有看到有生成包,仔细找资料,获得打包过程。
hbase可以打包出hadoop1,也可以打包hadoop2,我们需要hadoop2,先生成pom.xml.hadoop2 文件,在打包:

bash ./dev-support/generate-hadoopX-poms.sh 0.98.1 0.98.1-hadoop2
MAVEN_OPTS="-Xmx3g" mvn -f pom.xml.hadoop2 clean install -DskipTests -Prelease
MAVEN_OPTS="-Xmx3g" mvn -f pom.xml.hadoop2 install -DskipTests site assembly:single -Prelease


10多分钟,编译目录有100多M大小,得到打包文件
hbase-0.98.1/hbase-assembly/target/hbase-0.98.1-hadoop2-bin.tar.gz

下面附mvn的几个命令:
mvn clean
mvn compile -DskipTests
mvn package -DskipTests
mvn package -Pdist -DskipTests -Dtar
mvn package -Pdist,native -DskipTests -Dtar
mvn install -DskipTests

三、在各台机器上安装hadoop和hbase

在NameNode上用pssh这个批量脚本的工具来给三台DataNode配置环境,同时NameNode自己也配置好环境。

1. Prepare the following files in NameNods's /tmp diretory:
jdk-7u51-linux-x64.tar.gz hadoop-2.4.0.tar.gz hbase-0.98.1-hadoop2-bin.tar.gz key.tar.gz debian_set_java.sh

hadoop-2.4.0-config.tar.gz hbase-0.98.1-config.tar.gz 这两个conf文件放到是 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml 和 hbase-site.xml 篇幅有限,请看这篇配置文章。
key.tar.gz 里的两个文件,在NameNode上 ssh-keygen -t rsa -P "" 得到的~/.ssh/ 目录下的id_rsa 和 id_rsa.pub
因为amazon会有.pem 的文件,里面是私钥内容,用于登录amazon ec2主机,而这里我们不使用这个文件,而是自己生成。
/etc/ssh/ssh_config 将其中的# StrictHostKeyChecking ask 改成 StrictHostKeyChecking no

2. 执行我写的安装脚本,注释说明步骤:

其中用到的hosts 文件是类似这样的行 ubuntu@127.0.0.1
# Install jdk7u51, already installed it on NameNode before
# sudo bash debian_set_java.sh jdk-7u51-linux-x64.tar.gz

# Add pub key
cat /home/ubuntu/.ssh/id_rsa.pub >> /home/ubuntu/.ssh/authorized_keys

# Disable ipv6
sudo sed -e '$a net.ipv6.conf.all.disable_ipv6=1\nnet.ipv6.conf.default.disable_ipv6=1\nnet.ipv6.conf.lo.disable_ipv6=1' -i /etc/sysctl.conf
sudo sysctl -p

# change /etc/hosts
sudo sed -e '\$a 172.31.0.241    cloud1\n172.31.10.229   cloud2\n172.31.10.231   cloud3\n172.31.10.230   cloud4' -i /etc/hosts
# need change hostname in each node /etc/hostname
# need delete 127.0.0.1 localhost in /etc/hosts, because if not, hadoop DataNode will not started

# change owner of data directory
sudo chown ubuntu:ubuntu /mnt

# uncompress hadoop hbase
tar zxf /tmp/hadoop-2.4.0.tar.gz -C /mnt
tar zxf /tmp/hbase-0.98.1-hadoop2-bin.tar.gz -C /mnt
ln -s /mnt/hadoop-2.4.0 /mnt/hadoop
ln -s /mnt/hbase-0.98.1-hadoop2 /mnt/hbase

# modify hadoop-env.sh, yarn-env.sh
sed -e 's/${JAVA_HOME}/\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hadoop/etc/hadoop/hadoop-env.sh
sed -e 's/#export HADOOP_HEAPSIZE=/export HADOOP_HEAPSIZE=1024/' -i /mnt/hadoop/etc/hadoop/hadoop-env.sh
sed -e '/# some Java parameters/a\export JAVA_HOME=\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hadoop/etc/hadoop/yarn-env.sh

# make dir for hadoop
mkdir /mnt/hadoop/tmp
mkdir /mnt/hadoop/name

# add slaves
echo -e 'cloud2\ncloud3\ncloud4' > /mnt/hadoop/etc/hadoop/slaves

# add xml configuration files
tar zxf /tmp/hadoop-2.4.0-config.tar.gz -C /mnt/hadoop/etc/hadoop/

# Change system limition
sudo sed -e '$a username    -            nofile   65536\nusername    soft/hard    nproc    32000' -i /etc/security/limits.conf
sudo sed -i '$a \\nsession required        pam_limits.so' /etc/pam.d/common-session

# modify hbase hbase-env.sh
sed -e 's/# export JAVA_HOME=\/usr\/java\/jdk1.6.0/export JAVA_HOME=\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hbase/conf/hbase-env.sh
sed -e 's/# export HBASE_HEAPSIZE=1000/export HBASE_HEAPSIZE=4096/' -i /mnt/hbase/conf/hbase-env.sh
sed -e 's/# export HBASE_MANAGES_ZK=true/export HBASE_MANAGES_ZK=true/' -i /mnt/hbase/conf/hbase-env.sh

# add regionservers
echo -e 'cloud2\ncloud3\ncloud4' > /mnt/hbase/conf/regionservers

# add xml configuration files
tar zxf /tmp/hbase-0.98.1-config.tar.gz -C /mnt/hbase/conf/

# copy hadoop 64bit library to hbase
cp -r /mnt/hadoop/lib/native /mnt/hbase/lib

# soft link hadoop file to hbase
ln -s /mnt/hadoop/etc/hadoop/hdfs-site.xml /mnt/hbase/conf/



# pssh to execute the above commands in datanode
pssh -h hosts -i 'mkdir /home/ubuntu/.ssh ; tar zxvf /tmp/key.tar.gz -C /home/ubuntu/.ssh/ ; rm /tmp/key.tar.gz'
pssh -h hosts -i 'cd /tmp; sudo bash debian_set_java.sh jdk-7u51-linux-x64.tar.gz'
pssh -h hosts -i 'cat /home/ubuntu/.ssh/id_rsa.pub >> /home/ubuntu/.ssh/authorized_keys'

pscp -h hosts jdk-7u51-linux-x64.tar.gz debian_set_java.sh key.tar.gz /tmp
pscp -h hosts hadoop-2.4.0.tar.gz hbase-0.98.1-hadoop2-bin.tar.gz /tmp
pssh -h hosts -i "sudo sed -e '\$a net.ipv6.conf.all.disable_ipv6=1\nnet.ipv6.conf.default.disable_ipv6=1\nnet.ipv6.conf.lo.disable_ipv6=1' -i /etc/sysctl.conf"
pssh -h hosts -i 'sudo sysctl -p'
# pssh -h hosts -i 'sudo sed -e '1 i172.31.0.241    cloud1\n172.31.10.229   cloud2\n172.31.10.231   cloud3\n172.31.10.230   cloud4' -i /etc/hosts'
# need change hostname in each /etc/hostname
pssh -h hosts -i 'sudo chown ubuntu:ubuntu /mnt'
pssh -h hosts -i 'tar zxf /tmp/hadoop-2.4.0.tar.gz -C /mnt'
pssh -h hosts -i 'tar zxf /tmp/hbase-0.98.1-hadoop2-bin.tar.gz -C /mnt'
pssh -h hosts -i 'ln -s /mnt/hadoop-2.4.0 /mnt/hadoop'
pssh -h hosts -i 'ln -s /mnt/hbase-0.98.1-hadoop2 /mnt/hbase'
pssh -h hosts -i "sed -e 's/\${JAVA_HOME}/\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hadoop/etc/hadoop/hadoop-env.sh"
pssh -h hosts -i "sed -e 's/#export HADOOP_HEAPSIZE=/export HADOOP_HEAPSIZE=1024/' -i /mnt/hadoop/etc/hadoop/hadoop-env.sh"
pssh -h hosts -i "sed -e '/# some Java parameters/a\export JAVA_HOME=\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hadoop/etc/hadoop/yarn-env.sh"
pssh -h hosts -i 'mkdir /mnt/hadoop/tmp'
pssh -h hosts -i 'mkdir /mnt/hadoop/data'
pssh -h hosts -i "echo -e 'cloud2\ncloud3\ncloud4' > /mnt/hadoop/etc/hadoop/slaves"
pscp -h hosts hadoop-2.4.0-config.tar.gz /tmp
pssh -h hosts -i 'tar zxf /tmp/hadoop-2.4.0-config.tar.gz -C /mnt/hadoop/etc/hadoop/'

pssh -h hosts -i "sudo sed -e '\$a username    -            nofile   65536\nusername    soft/hard    nproc    32000' -i /etc/security/limits.conf"
pssh -h hosts -i "sudo sed -i '\$a \\\nsession required        pam_limits.so' /etc/pam.d/common-session"
pssh -h hosts -i "sed -e 's/# export JAVA_HOME=\/usr\/java\/jdk1.6.0/export JAVA_HOME=\/usr\/local\/java\/jdk1.7.0_51/' -i /mnt/hbase/conf/hbase-env.sh"
pssh -h hosts -i "sed -e 's/# export HBASE_HEAPSIZE=1000/export HBASE_HEAPSIZE=4096/' -i /mnt/hbase/conf/hbase-env.sh"
pssh -h hosts -i "sed -e 's/# export HBASE_MANAGES_ZK=true/export HBASE_MANAGES_ZK=true/' -i /mnt/hbase/conf/hbase-env.sh"
pssh -h hosts -i "echo -e 'cloud2\ncloud3\ncloud4' > /mnt/hbase/conf/regionservers"
pscp -h hosts hbase-0.98.1-config.tar.gz /tmp
pssh -h hosts -i 'tar zxf /tmp/hbase-0.98.1-config.tar.gz -C /mnt/hbase/conf/'
pssh -h hosts -i 'cp -r /mnt/hadoop/lib/native /mnt/hbase/lib'
pssh -h hosts -i 'ln -s /mnt/hadoop/etc/hadoop/hdfs-site.xml /mnt/hbase/conf/'

# If you restart hadoop(Maybe reformat NameNode), you need clear data directorys.
pssh -h hosts -i 'rm -r /mnt/hadoop/data/*'


四、启动hadoop和hbase

启动过程中会遇到一个问题,aws ec2默认只有22端口是开放的,其他一律不行,于是我们要配置Security Group的端口开放策略。
端口 8088,50070 对所有网络都开放,因为要从这两个端口进入web访问hadoop的管理界面。
端口 60020,8030 - 8033,3888,2888,60010,2181,30000 - 65535,9000,50010 在这个Security Group内部机器开放,hadoop和hbase程序可以正常访问。
这些动态端口像 8030 - 8033 是hadoop的配置文件里面的,还有部分像 30000 - 65535 是hbase的zookeeper管理的动态端口,都是一步步看log的错误尝试出来,说多都是泪,累觉不爱啊!

cd /mnt/hadoop/
bin/hdfs namenode -format
sbin/start-dfs.sh # cloud1 NameNode SecondaryNameNode, cloud2 3 4 DataNode
sbin/start-yarn.sh # cloud1 ResourceManager, cloud2 3 4 NodeManager
jps
查看集群状态 bin/hdfs dfsadmin -report
查看文件块组成 bin/hdfs fsck / -files -blocks
NameNode查看hdfs  http://cloud1:50070
查看RM    http://cloud1:8088

cd /mnt/hbase
bin/start-hbase.sh

附hbase的一些命令:
bin/hbase shell
t = create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
scan 'test'
describe 'test'
get 'test', 'row1'
disable 'test'
drop 'test'
count 'test', CACHE => 1000

分享到:
评论

相关推荐

    Hbase中文文档

    11.11. Amazon EC2 11.12. 案例 12. 故障排除和调试 HBase 12.1. 通用指引 12.2. Logs 12.3. 资源 12.4. 工具 12.5. 客户端 12.6. MapReduce 12.7. NameNode 12.8. 网络 12.9. RegionServer 12.10. Master 12.11. ...

    Hadoop实战中文版

    9.4 在EC2 上运行MapReduce 程序 9.4.1 将代码转移到Hadoop集群上 9.4.2 访问Hadoop集群上的数据 9.5 清空和关闭EC2 实例 9.6 Amazon Elastic MapReduce 和其他AWS 服务 9.6.1 Amazon Elastic MapReduce 9.6.2...

    Hadoop实战中文版.PDF

    1649.2.2 获得命令行工具 1669.2.3 准备SSH密钥对 1689.3 在EC2上安装Hadoop 1699.3.1 配置安全参数 1699.3.2 配置集群类型 1699.4 在EC2上运行MapReduce程序 1719.4.1 将代码转移到Hadoop集群上 1719...

    Hadoop权威指南 第二版(中文版)

     Amazon EC2上的Hadoop 第10章 管理Hadoop  HDFS  永久性数据结构  安全模式  日志审计  工具  监控  日志  度量  Java管理扩展(JMX)  维护  日常管理过程  委任节点和解除节点  升级 第11章 Pig简介 ...

    Hadoop实战

    1699.3.2 配置集群类型 1699.4 在EC2上运行MapReduce程序 1719.4.1 将代码转移到Hadoop集群上 1719.4.2 访问Hadoop集群上的数据 1729.5 清空和关闭EC2实例 1759.6 Amazon Elastic MapReduce和其他AWS服务 1769.6.1 ...

    Hadoop权威指南(中文版)2015上传.rar

    Amazon EC2上的Hadoop 第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 ...

    Hadoop实战(陆嘉恒)译

    在云上运行Hadoop9.1 Amazon Web Services 简介9.2 安装AWS9.2.1 获得AWS身份认证凭据9.2.2 获得命令行工具9.2.3 准备SSH密钥对9.3 在EC2 上安装Hadoop9.3.1 配置安全参数9.3.2 配置集群类型9.4 在EC2 上运行...

    Hadoop基础培训教程.pdf

    2004年Google发表论文介绍MapReduce算法,2005年Nutch中实现了 MapReduce算法 2006年2月Hadoop独立成Lucene的一个子项目,与此同时,Hadoop创 始人Doug Cutting加入YAHOO 2007年11月纽约时报利用亚马逊EC2和Hadoop将...

    hadoop_the_definitive_guide_3nd_edition

    Hadoop on Amazon EC2 332 10. Administering Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 HDFS 337 Persistent Data Structures 337 Safe ...

    [PPT]《云计算》教材配套课件9-HBase的原理与实验

    亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。读者可从本书配套网站中国云计算...

    云计算讲义PPPT 2

    重点阐述了云计算领域具代表性的Google、亚马逊和微软三个...亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。

    Pro.Docker.148421829

    In this fast-paced book on the Docker open standards platform for developing, packaging and running portable distributed applications, Deepak Vorha ...Appendix A: Using the Amazon EC2

    quantcluster:适用于EC2集群的QF研究的StarCluster插件

    其他插件用于在StarCluster上配置Hadoop,Hive和HBase。 下面的包被添加到和基础StarCluster图像make_image.sh : 算法交易库。 使用SWIG从TWS C ++ API生成的第三方Interactive Brokers Python API。 实时策略...

    云计算讲义PPT 1

    重点阐述了云计算领域具代表性的Google、亚马逊和微软三个...亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。

    [PPT]《云计算》教材配套课件6-亚马逊的云计算平台AWS

    亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。读者可从本书配套网站中国云计算...

    云计算系列完整教程 第三部分

    本书是中国云计算专家委员会刘鹏教授主编的系统讲解云计算...亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。

    云计算第二版

    3.1.1 Dynamo在Amazon服务平台的地位 88 3.1.2 Dynamo架构的主要技术 89 3.2 弹性计算云EC2 97 3.2.1 EC2的主要特性 97 3.2.2 EC2基本架构及主要概念 97 3.2.3 EC2的关键技术 99 3.3.4 EC2安全及容错机制 101 3.3 ...

    [PPT]《云计算》教材配套课件10-分布式锁服务ZooKeeper

    亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。读者可从本书配套网站中国云计算...

    [PPT]《云计算》教材配套课件1-云计算技术概述

    亚马逊AWS的Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等;微软的 Azure、SQL服务、.Net服务和Live服务等;开源云计算技术的HDFS、HBase和Eucalyptus等。读者可从本书配套网站中国云计算...

Global site tag (gtag.js) - Google Analytics