Hadoop环境搭建

 


机器名 IP 用途
Master 10.125.20.5 Namenode,master,jobTracker
Slave1 10.125.20.9 Datanode,slave,taskTracker
Slave2 10.125.20.10 Datanode,slave,taskTracker


在所有的节点以root执行如下脚本:
#设置hosts文件
echo 10.125.20.5  master1 >> /etc/hosts
echo 10.125.20.9  slave1   >> /etc/hosts
echo 10.125.20.10  slave2   >> /etc/hosts

注意:不要在127.0.0.1行写除了localhost*以外的机器名称,否则会出问题。同时需要确保
      hostname名称不一致,root执行hostname master1方式设置hostname

#创建相应目录和用户
export HADOOP_HOME=/usr/local/hadoop
mkdir -p $HADOOP_HOME
useradd hadoop -d $HADOOP_HOME
chown -R hadoop:hadoop $HADOOP_HOME
passwd hadoop

集群内所有的机器登录用户名和密码要保持相同!!


设置password-less
使用hadoop用户登录,在所有节点hadoop用户根目录下创建.ssh目录
mkdir ~/.ssh
需要更改.ssh 权限:chmod 700 .ssh

在master(10.125.20.5)上执行:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
需要更改authorized_keys 权限:chmod 644 authorized_keys
ssh master          #这一步一定要执行
此时可以不需要口令登录master了,下面要让master不需要密码登录所有其他的slave机器。

scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh
scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh
scp ~/.ssh/authorized_keys hadoop@slave3:~/.ssh
ssh slave1
ssh slave2

关闭防火墙
--所有节点以root执行 su - root:
service iptables stop


--安装JDK
在所有的节点拷贝/下载JDK安装文件到/usr/local /hadoop下,然后执行:
cd /usr/local/hadoop
chmod a+x jdk-6u20-linux-i586.bin
./jdk-6u20-linux-i586.bin

在所有节点安装JDK后以root在所有节点执行:
JAVA_HOME=/usr/local /hadoop/jdk1.6.0_20

echo "export JAVA_HOME=$JAVA_HOME"                                      >> /etc/profile
echo "export JRE_HOME=$JAVA_HOME/jre"                                   >> /etc/profile
echo 'export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH'       >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH'                   >> /etc/profile


安装hadoop
把hadoop安装文件上传到/usr/local /hadoop下,然后以hadoop执行:
cd /usr/local/hadoop
gunzip -d hadoop-0.20.2.tar.gz
tar xvf hadoop-0.20.2.tar
需要使用root用户修改解压后hadoop-0.20.2目录的权限
chown -R hadoop:hadoop $HADOOP_HOME

安装好以后,以root在所有节点执行如下脚本:
echo "export HADOOP_HOME=/usr/local /hadoop/hadoop-0.20.2"  >> /etc/profile
echo 'export PATH=$HADOOP_HOME/bin:$PATH'  >> /etc/profile

JAVA_HOME=/usr/local/hadoop/jdk1.6.0_20
HADOOP_HOME=/usr/local/hadoop/hadoop-0.20.2
cd $HADOOP_HOME
echo "export JAVA_HOME=$JAVA_HOME" >> conf/hadoop-env.sh


配置conf/masters 和conf/slaves 文件:(只在namenode 上配置)

配置如下:
-bash-3.2$ more masters
master
-bash-3.2$ more slaves
slave1
slave2

在所有节点配置其他重要文件:
配置如下:
-bash-3.2$ more core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-0.20.2/hadooptmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://10.125.20.5:9000</value>
</property>

</configuration>

--其中:hadoop.tmp.dir: 上传到Hadoop的所有 文件都会被存放在hadoop.tmp.dir所指定的目录, 所以要确保这个目录是足够大的。目录不需要存在,在后面format的步骤会自动创建。

fs.default.name: NameNode对应的URL,格式为:hdfs://IP:Port

-bash-3.2$
-bash-3.2$ more hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

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

其中:dfs.replication=1表示只复制一份数据到其他的datanode上,如果dfs.replication=N,则至少要用N+1个datanode,否则报错。

-bash-3.2$
-bash-3.2$ more mapred-site.xml
<?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>10.125.20.5:9001</value>
</property>

</configuration>

其中:mapred.job.tracker:jobtracker对应的IP或者hostname,一般和namenode在一个机器上,格式为 IP:Port

 

Hadoop启动:

在master节点格式化:
hadoop namenode -format
format命令执行后检查hadoop.tmp.dir设定的目录是否已经生成。

启动HSFS和MapReduce
这步操作只需要在NameNode操作即可,它会自动把所有datanode相关进程也起来(前提是namenode不需要密码登录datanode)

-bash-3.2$ start-all.sh
starting namenode, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-namenode-master.out
slave1: starting datanode, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-datanode-slave1.out
slave2: starting datanode, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-datanode-slave2.out
master1: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-secondarynamenode-master.out
jobtracker running as process 5361. Stop it first.
slave1: starting tasktracker, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-tasktracker-slave1.out
slave2: starting tasktracker, logging to /usr/local/hadoop/hadoop-0.20.2/bin/../logs/hadoop-hadoop-tasktracker-slave2.out

可以在所有的节点执行jps来查看进程信息:

--namenode
-bash-3.2$ jps
13442 Jps
13173 NameNode
13308 SecondaryNameNode
13366 JobTracker

--datanode
-bash-3.2$ jps
7809 DataNode
7895 TaskTracker
7935 Jps


可以用hadoop dfsadmin查看状态,如:

-bash-3.2$ hadoop dfsadmin -report
Configured Capacity: 42278023168 (39.37 GB)
Present Capacity: 38171983887 (35.55 GB)
DFS Remaining: 38171934720 (35.55 GB)
DFS Used: 49167 (48.01 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)

Name: 10.125.20.9:50010
Decommission Status : Normal
Configured Capacity: 15852371968 (14.76 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 2048442368 (1.91 GB)
DFS Remaining: 13803905024(12.86 GB)
DFS Used%: 0%
DFS Remaining%: 87.08%
Last contact: Tue May 11 15:57:32 EDT 2010


Name: 10.125.20.10:50010
Decommission Status : Normal
Configured Capacity: 26425651200 (24.61 GB)
DFS Used: 24591 (24.01 KB)
Non DFS Used: 2057596913 (1.92 GB)
DFS Remaining: 24368029696(22.69 GB)
DFS Used%: 0%
DFS Remaining%: 92.21%
Last contact: Tue May 11 15:57:33 EDT 2010

 

 

(1)先在本地磁盘建立两个输入文件file01 和file02:
echo "i am suk" > 1.txt
echo "i am a man" > 2.txt
(2)在hdfs 中建立一个input 目录:
hadoop fs -mkdir input
(3)将1.txt和2.txt 拷贝到hdfs 中:
hadoop fs -copyFromLocal /home/test/*.txt input
(4)执行wordcount:
cd $HADOOP_HOME
hadoop jar hadoop-0.20.2-examples.jar wordcount input output
(5)完成之后,查看结果:
hadoop fs -cat output/part-r-00000
a       1
am      1
i       1
is      1
man     1
suk     2

 

一点基础:
1. HDFS里的内容在任意节点都是一样的
2. 可以在任何节点(datanode和namenode)处理HDFS里的文件
3. 往HDFS上传文件时,在那个节点上传文件,就在那个节点上占用空间

 

 

 

 

 

 

 

 


HIVE安装

tar zxvf hive-0.6.0-bin.tar.gz
解压后
root 用户设置env
echo "export HIVE_HOME=/usr/local/hadoop/hive-0.6.0-bin" >> /etc/profile
echo 'export PATH=$HIVE_HOME/bin:$PATH' >> /etc/profile

测试:
CREATE TABLE test (foo INT, bar STRING);

部署到其他节点:
scp -r hive-0.6.0-bin slave1:`pwd`
scp -r hive-0.6.0-bin slave2:`pwd`

 

添加一个节点:


在原来所有节点添加对新节点的解析:
echo 10.125.20.10  slave2   >> /etc/hosts

在新节点添加:
echo 10.125.20.5  master >> /etc/hosts
echo 10.125.20.9  slave1   >> /etc/hosts
echo 10.125.20.11  slave3   >> /etc/hosts
echo 10.125.20.10  slave2   >> /etc/hosts

 

#创建相应目录和用户
export HADOOP_HOME=/usr/local/hadoop
mkdir -p $HADOOP_HOME
useradd hadoop -d $HADOOP_HOME
chown -R hadoop:hadoop $HADOOP_HOME
passwd hadoop


设置master到新节点的免口令
1) 在新节点hadoop下执行
mkdir ~/.ssh

2) 在master的hadoop下执行执行
cd ~/.ssh
scp authorized_keys slave2:`pwd`

3) 测试
ssh slave2


拷贝相关文件到新节点:
cd /usr/local/hadoop
scp -r hadoop-0.20.2.tar slave2:`pwd`
scp -r jdk-6u20-linux-i586.bin slave2:`pwd`
scp -r hive-0.5.0-bin.tar.gz slave2:`pwd`


根据原方法安装JDK、Hadoop、Hive


在master添加修改slave,添加新的IP或者hostname

 


hive 集群的安装配置

此时hive的元数据是存在本地的,一个节点看不到其他节点创建的表等信息,在实际应用中,这个是不适用的。
我们需要配置一个数据库,用于集中存在hive的元数据,实现集群。


首先停止所有hadoop相关集成及服务

stop-all.sh


下载

cd /usr/local/hadoop
wget http://archive.apache.org/dist/db/derby/db-derby-10.6.1.0/db-derby-10.6.1.0-bin.tar.gz

解压
tar -zxvf db-derby-10.6.1.0-bin.tar.gz
mkdir -p db-derby-10.6.1.0-bin/data

--以root修改/etc/profile
echo "export DERBY_INSTALL=/usr/local/hadoop/db-derby-10.6.1.0-bin"  >> /etc/profile
echo "export DERBY_HOME=/usr/local/hadoop/db-derby-10.6.1.0-bin" >> /etc/profile
echo 'export PATH=$DERBY_HOME/bin:$PATH'  >> /etc/profile

启动hadoop
start-dfs.sh
nohup startNetworkServer -h 0.0.0.0 &          


cd $HIVE_HOME/conf

--修改配置文件 hive-default.xml
-bash-3.2$ vi

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>
  <name>hive.metastore.local</name>
  <value>true</value>
  <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby://10.125.20.5:1527/metastore_db;create=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.ClientDriver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

</configuration>

 

=========================hive.0.5.0以后版本不需要配置jpox.properties.见官网说明
-bash-3.2$ vi jpox.properties

javax.jdo.PersistenceManagerFactoryClass=org.jpox.PersistenceManagerFactoryImpl
org.jpox.autoCreateSchema=false
org.jpox.validateTables=false
org.jpox.validateColumns=false
org.jpox.validateConstraints=false
org.jpox.storeManagerType=rdbms
org.jpox.autoCreateSchema=true
org.jpox.autoStartMechanismMode=checked
org.jpox.transactionIsolation=read_committed
javax.jdo.option.DetachAllOnCommit=true
javax.jdo.option.NontransactionalRead=true
javax.jdo.option.ConnectionDriverName=org.apache.derby.jdbc.ClientDriver
javax.jdo.option.ConnectionURL=jdbc:derby://10.125.20.5:1527/metastore_db;create=true
javax.jdo.option.ConnectionUserName=APP
javax.jdo.option.ConnectionPassword=mine

 


--在所有slave节点执行
cp $DERBY_HOME/lib/derbyclient.jar $HIVE_HOME/lib
cp $DERBY_HOME/lib/derbytools.jar $HIVE_HOME/lib


cd /usr/local/hadoop
scp -r db-derby-10.6.1.0-bin slave1:`pwd`
scp -r db-derby-10.6.1.0-bin slave2:`pwd`               ===新增加的节点(在10.125.20.10上,但还没有实现)
scp -r db-derby-10.6.1.0-bin slave3:`pwd`


cd $HIVE_HOME/conf
scp jpox.properties slave1:`pwd`             ==hive.0.5.0以上版本不需要啦
scp hive-default.xml slave1:`pwd`            ==hive.0.5.0以下版本为hive-site.xml


scp jpox.properties slave2:`pwd`                 ==这个后续处理
scp hive-default.xml slave2:`pwd`

scp jpox.properties slave3:`pwd`                
scp hive-default.xml slave3:`pwd`

 


启动hive
bin/hive
设置:
SET mapred.job.tracker=master:50030;        ==还没有和hadoop结合起来用。

web启动
bin/hive --service hwi &
bin/hive -hiveconf x1=y1 -hiveconf x2=y2  (这种方式的启动还没有理解)


--增加测试用例,create table, insert value ,delete value, update value

http://10.125.20.5:50070
http://10.125.20.5:9999

 

1:分布式数据质量监控系统

 

1:对纳入系统管理的数据实体和数据处理过程建立有效的监控机制,提供全面及时的数据告警,控制预防错误范围的扩大;

2:与源系统数据质量相互验证,分析源系统事件,监控业务数据合理性,对源系统的部分数据起到一定的检查作用;

3:将数据质量管理落实到各环节的可检查项中,实现流程化管理,提供常见问题的自动处理方法;

 

 

1:推送系统

为数据仓库各系统提供短信和邮件推送功能,减少各系统重复开发量,并提供统一的邮件和短信调用接口

为各系统提供邮件和短信推送功能,并可以灵活定制邮件和短信的样式

提供接受人组管理的功能,可以灵活配置邮件和短信接受人

提供接受人免打扰功能,在免打扰期间,不接受短信

 

数据交换系统

1 支持多种类型的数据源数据抽取(MySQL,Oracle,SqlServer,Sybase,Hdfs,MQ,ICE,File),

2 支持多种类型的目的数据源加载(Hdfs,File,MySQL,Oracle)

3 通过插件扩展支持新的数据源类型,以快速支持新的场景。

4 高性能的数据交换。

5 支持一对多广播

6 可以选择落地/非落地数据中转。

7 支持表筛选、记录筛选、列筛选、日期格式转换,编码转换等大量特性。

8 全局连接数控制,不需要人为干预任务调度。

9 支持插件分布式部署,统一调度

10 分布式之间插件的状态管理

11 数据传输流量统计

12 抽取,加载等运行状态管理

13 统一告警处理

14 简单的配置,分引擎配置,插件配置,工作项配置

15 支持Filter过滤功能,实现个性定制

16 支持Dump和load并发数控制

 

 

web用户行为分析分析系统

1:可以处理和存储每日10亿PV的日志

2:可以线性扩展

3:可以完成按小时计算日志的任务

4:有比较完善的监控系统

5:有比较完善的流程调度系统

6:获取基于Hadoop的数据仓库的解决方案

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值