hadoop安装与常用指令

chkconfig sshd on
setenforce 0
chkconfig --level 12345 iptables off
cat /etc/selinux/config
cat /etc/resolve
echo JAVA_HOME=/usr/local/jdk >> /etc/profile
echo PATH=$JAVA_HOME/bin:$PATH:$HOME/bin >> /etc/profile
echo export PATH >> /etc/profile
source /etc/profile
echo 10.10.42.200 master.mHadoop.com > /etc/hosts
echo 10.10.42.201 slave1.mHadoop.com >> /etc/hosts
echo 10.10.42.202 slave2.mHadoop.com >> /etc/hosts
echo 10.10.42.203 slave3.mHadoop.com >> /etc/hosts
yum remove java-*

10.10.42.200 master.mHadoop.com
10.10.42.201 slave1.mHadoop.com
10.10.42.202 slave2.mHadoop.com
10.10.42.203 slave3.mHadoop.com

nameserver 10.10.228.19
nameserver 10.10.228.20

JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
export PATH

ssh-keygen -t rsa
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.200
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.201
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.202
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.203
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.202
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.201
ssh-copy-id -i  /root/.ssh/id_rsa.pub root@10.10.42.200

cd /etc/yum.repos.d/
wget http://public-repo-1.hortonworks.com/ambari/centos6/1.x/updates/1.6.1/ambari.repo
yum install ambari-server
ambari-server setup
ERROR: Before starting Ambari Server, you must copy the MySQL JDBC driver JAR file to /usr/share/java.
yum install ambari-agent
ambari-agent start

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#skip-name-resolve
#skip-grant-tables

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

UPDATE user SET Password = password ( 'ambari' ) WHERE User = 'root' ;
UPDATE user SET Password = password ( 'ambari' ) WHERE User = 'mysql' ;
UPDATE user SET Password = password ( 'ambari' ) WHERE User = 'ambari' ;

grant all privileges on *.* to root@'localhost' identified by 'ambari';
grant all privileges on *.* to root@'10.10.%' identified by 'ambari';
grant all privileges on *.* to mysql@'localhost' identified by 'ambari';
grant all privileges on *.* to mysql@'10.10.%' identified by 'ambari';
grant all privileges on *.* to ambari@'localhost' identified by 'ambari';
grant all privileges on *.* to ambari@'10.10.%' identified by 'ambari';
grant all privileges on *.* to ambari@'master.mHadoop.com' identified by 'ambari';
grant all privileges on *.* to mysql@'master.mHadoop.com' identified by 'ambari';
grant all privileges on *.* to root@'master.mHadoop.com' identified by 'ambari';

master.mHadoop.com

cp drivers.jar 到客户端

Hadoop基本操作命令
假设Hadoop的安装目录HADOOP_HOME为/home/admin/hadoop。
1.启动Hadoop:进入HADOOP_HOME目录执行sh bin/start-all.sh
2.关闭Hadoop:进入HADOOP_HOME目录执行sh bin/stop-all.sh
Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。
查看hdfs中/user/admin/aaron目录下的文件。
1.进入HADOOP_HOME目录执行sh bin/hadoop fs -ls /user/admin/aaron 这样,我们就找到了hdfs中/user/admin/aaron目录下的文件了。
2.进入HADOOP_HOME目录执行sh bin/hadoop fs -lsr /user/admin/aaron
创建文件目录
1.进入HADOOP_HOME目录执行sh bin/hadoop fs -mkdir /user/admin/aaron/newDir
删除文件
1.进入HADOOP_HOME目录执行sh bin/hadoop fs -rm /user/admin/aaron/needDelete
2.进入HADOOP_HOME目录执行sh bin/hadoop fs -rmr /user/admin/aaron
上传文件
1.上传一个本机/home/admin/newFile的文件到hdfs中/user/admin/aaron目录下,进入HADOOP_HOME目录。执行sh bin/hadoop fs –put /home/admin/newFile /user/admin/aaron/
下载文件
1.下载hdfs中/user/admin/aaron目录下的newFile文件到本机/home/admin/newFile中,进入HADOOP_HOME目录。执行sh bin/hadoop fs –get /user/admin/aaron/newFile /home/admin/newFile
查看文件
1.查看hdfs中/user/admin/aaron目录下的newFile文件进入HADOOP_HOME目录。
2.执行sh bin/hadoop fs –cat /home/admin/newFile
MapReduce Job操作 原则上说,Hadoop所有的MapReduce Job都是一个jar包。运行一个/home/admin/hadoop/job.jar的MapReduce Job
1.进入HADOOP_HOME目录,行sh bin/hadoop jar /home/admin/hadoop/job.jar [jobMainClass] [jobArgs]
杀死某个正在运行的Job 假设Job_Id为:job_201005310937_0053
1.进入HADOOP_HOME目录。执行sh bin/hadoop job -kill job_201005310937_0053
hadoop Shell命令详解


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
zookeeper+kafka集群安装之一
kafka作为分布式日志收集或系统监控服务,我们有必要在合适的场合使用它。kafka的部署包括zookeeper环境/kafka环境,同时还需要进行一些配置操作.接下来介绍如何使用kafka.
准备3台虚拟机, 系统是RHEL64服务版.我们使用3个zookeeper实例构建zk集群,使用3个kafka broker构建kafka集群.
其中kafka为kafka_2.9.2-0.8.1.1,http://mirrors.hust.edu.cn/apache/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz
zookeeper为3.4.5V,http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
1) 每台机器配置如下:
$ cat /etc/hosts
# zookeeper hostnames:
192.168.8.182       zk1
192.168.8.183       zk2
192.168.8.184       zk3

2) 每台机器上安装jdk, zookeeper, kafka, 配置如下:
$ vi /etc/profile
# jdk, zookeeper, kafka
export KAFKA_HOME=/usr/local/lib/kafka/kafka_2.9.2-0.8.11
export ZK_HOME=/usr/local/lib/zookeeper/zookeeper-3.4.6
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$KAFKA_HOME/bin:$ZK_HOME/bin:$PATH

3) 每台机器上运行:
$ source /etc/profile
$ mkdir -p /var/lib/zookeeper
$ cd $ZK_HOME/conf
$ cp zoo_sample.cfg zoo.cfg
$ vi zoo.cfg
dataDir=/var/lib/zookeeper
# the port at which the clients will connect
clientPort=2182
# zookeeper cluster
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

4) 每台机器上生成myid:
zk1:
$ echo "1" > /var/lib/zookeeper/myid
zk2:
$ echo "2" > /var/lib/zookeeper/myid
zk3:
$ echo "3" > /var/lib/zookeeper/myid

5) 每台机器上运行setup关闭防火墙
Firewall:
[ ] enabled

6) 每台机器上启动zookeeper:
$ zkServer.sh start
查看状态:
$ zkServer.sh status
首先了解几个kafka中的概念:
1、kafka是一个消息队列服务器,服务称为broker, 消息发送者称为producer, 消息接收者称为consumer;
2、通常我们部署多个broker以提供高可用性的消息服务集群.典型的是3个broker;
3、消息以topic的形式发送到broker,消费者订阅topic,实现按需取用的消费模式;
4、创建topic需要指定replication-factor(复制数目, 通常=broker数目);
5、每个topic可能有多个分区(partition), 每个分区的消息内容不会重复:
假定我们有一个名称为test的topic, 分区数目为2, 当我们发送到这个test具体的消息"msg1:hello beijing"和"msg2:hello shanghai"的时候,我们如何知道消息的发送路径呢(发往哪个分区)?
msg1如果被发送到分区test.1,则肯定不会发送到test.2. 数据发送路径选择决策受kafka.producer.Partitioner的影响:
interface Partitioner {   
int partition(java.lang.Object key, int numPartitions);
}
一个伪代码的实现如下:
package org.mymibao.mq.client;
import kafka.producer.Partitioner;
public class DefaultKafkaPartitioner implements Partitioner {  
private final static int FIRST_PARTITION_ID = 1;   
public int partition(Object key, int numPartitions) {      
return FIRST_PARTITION_ID;   
}
}

kafka安装配置参考:
Producer:消息发布者
Broker:消息中间件处理结点,一个kafka节点就是一个broker
Consumer:消息订阅者
kafka的消息分几个层次:
1) Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责多个topic的分发
2) Partition: Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
3) Message:消息,最小订阅单元
具体流程:
1. Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
2. kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
3. Consumer从kafka集群pull数据,并控制获取消息的offset
参考 http://blog.csdn.net/yfkiss/article/details/17348693
1)下载KAFKA
$ wget http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz
2)配置$KAFKA_HOME/config/server.properties
我们安装3个broker,分别在3个vm上:zk1,zk2,zk3:
zk1:
$ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk1
$ vi $KAFKA_HOME/config/server.properties
broker.id=0
port=9092
host.name=zk1
advertised.host.name=zk1
num.partitions=2
zookeeper.contact=zk1:2182,zk2:2182,zk3:2182

zk2:
$ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk2
$ vi $KAFKA_HOME/config/server.properties
broker.id=1
port=9092
host.name=zk2
advertised.host.name=zk2
num.partitions=2
zookeeper.contact=zk1:2182,zk2:2182,zk3:2182

zk3:
$ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk3
$ vi $KAFKA_HOME/config/server.properties
broker.id=2
port=9092
host.name=zk3
advertised.host.name=zk3
num.partitions=2
zookeeper.contact=zk1:2182,zk2:2182,zk3:2182

3)启动zookeeper服务, 在zk1,zk2,zk3上分别运行:
$ zkServer.sh start

4)启动kafka服务, 在zk1,zk2,zk3上分别运行:
$ kafka-server-start.sh $KAFKA_HOME/config/server.properties

5) 新建一个TOPIC(replication-factor=num of brokers)
$ kafka-topics.sh --create --topic test --replication-factor 3 --partitions 2 --zookeeper zk1:2182,zk2:2182,zk3:2182

[root@slave1 ~]#  kafka-topics.sh --list --zookeeper zk1:2182,zk2:2182,zk3:2182
test
test001
test002
test003

6)假设我们在zk2上,开一个终端,发送消息至kafka(zk2模拟producer)
producer发送消息
[root@master lib]# kafka-console-producer.sh --broker-list zk1:9092,zk2:9092,zk3:9092 --topic test 

7)假设我们在zk3上,开一个终端,显示消息的消费(zk3模拟consumer)
consumer接收消息
[root@slave1 ~]# kafka-console-consumer.sh --zookeeper zk1:2182,zk2:2182,zk3:2182 --topic test --from-beginning

如果要最新的数据,可以不带--from-beginning参数即可。
[root@slave1 ~]# kafka-console-consumer.sh --zookeeper zk1:2182,zk2:2182,zk3:2182 --topic test

8) 编程操作Producer和Consumer的例子参考:


9) 干掉follow broker
杀掉一个非lead broker(lead broker id为2)
$ pkill -9 -f server.properties


Flume下载及文档:
http://flume.apache.org/
Flume安装:
01.$tar zxvf apache-flume-1.4.0-bin.tar.gz/usr/local
Flume启动命令:
[root@master local]# ./flume/bin/flume-ng agent --conf conf --conf-file flume/conf/flume-conf.properties --name producer -Dflume.root.logger=INFO,console

Storm0.9.0.1版本提供了两种形式的压缩包:zip和tar.gz
我们下载tar.gz格式的,这样可以免去uzip的安装
下载路径:http://downloads.sourceforge.net/project/machomebrew/Bottles/storm-0.9.0.1.lion.bottle.tar.gz?r=http%3A%2F%2Fsourceforge.jp%2Fprojects%2Fsfnet_machomebrew%2Fdownloads%2FBottles%2Fstorm-0.9.0.1.lion.bottle.tar.gz%2F&ts=1418009005&use_mirror=liquidtelecom
解压命令
01.tar -zxvf storm-0.9.0.1.tar.gz
复制代码2.4 下载并解压Storm发布版本

Storm发行版本解压目录下有一个conf/storm.yaml文件,用于配置Storm。默认配置在这里可以查看。conf/storm.yaml中的配置选项将覆盖defaults.yaml中的默认配置。以下配置选项是必须在conf/storm.yaml中进行配置的:
1) storm.zookeeper.servers:Storm集群使用的Zookeeper集群地址,其格式如下:
01.storm.zookeeper.servers:

02.- “111.222.333.444″

03.- “555.666.777.888″
复制代码如果Zookeeper集群使用的不是默认端口,那么还需要storm.zookeeper.port选项。

2) storm.local.dir:Nimbus和Supervisor进程用于存储少量状态,如jars、confs等的本地磁盘目录,需要提前创建该目录并给以足够的访问权限。然后在storm.yaml中配置该目录,如:
01.storm.local.dir: "/home/admin/storm/workdir"
复制代码3) nimbus.host:Storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件,如:
01.01.nimbus.host: "111.222.333.444" 
复制代码4) supervisor.slots.ports: 对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:
01.supervisor.slots.ports:

02.    -6700

03.    -6701

04.    -6702

05.    -6703
复制代码2.5 启动Storm各个后台进程

最后一步,启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。
以下是启动Storm各个后台进程的方式:
Nimbus: 在Storm主控节点上运行”bin/storm nimbus >/dev/null 2>&1 &”启动Nimbus后台程序,并放到后台执行;
Supervisor: 在Storm各个工作节点上运行”bin/storm supervisor>/dev/null 2>&1 &”启动Supervisor后台程序,并放到后台执行;
UI: 在Storm主控节点上运行”bin/storm ui >/dev/null 2>&1 &”启动UI后台程序,并放到后台执行,启动后可以通过http://{nimbushost}:8080观察集群的worker资源使用情况、Topologies的运行状态等信息。
logview:在Storm主节点上运行"bin/storm logviewer > /dev/null 2>&1"启动logviewer后台程序,并放到后台执行。
注意事项:
启动Storm后台进程时,需要对conf/storm.yaml配置文件中设置的storm.local.dir目录具有写权限。
Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。
经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。
为了方便使用,可以将bin/storm加入到系统环境变量中。
至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。

接下来我们检查下环境的运行情况:--使用jps检查守护进程运行状况
01.zqgame@kickseed:/data/storm/zookeeper-3.4.5/bin$ jps

02.20420 nimbus

03.20623 logviewer

04.20486 supervisor

05.20319 core

06.21755 Jps

 

flume和kafka整合
1.下载flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin
2.提取插件中的flume-conf.properties文件
修改该文件:#source section
producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
producer.sources.s.channels = c
修改所有topic的值改为test
将改后的配置文件放进flume/conf目录下
在该项目中提取以下jar包放入环境中flume的lib下:
 
wKiom1RGKweDSgs2AABYq9hiPC4413.jpg (10.99 KB, 下载次数: 0)
下载附件  保存到相册
2014-10-23 09:29 上传


还有package目录的flumeng-kafka-plugin.jar包一并放到flume的lib目录下。
附上flume的配置文件
############################################
#  producer config
###########################################

#agent section
producer.sources = s
producer.channels = c
producer.sinks = r

#source section
producer.sources.s.type = exec
producer.sources.s.channels = c
producer.sources.s.command = tail -f  /var/log/messages
#producer.sources.s.type=spooldir
#producer.sources.s.spoolDir=/home/xiaojie.li
#producer.sources.s.fileHeader=false
#producer.sources.s.type=syslogtcp
#producer.sources.s.port=5140
#producer.sources.s.host=localhost


# Each sink's type must be defined
producer.sinks.r.type = org.apache.flume.plugins.KafkaSink
producer.sinks.r.metadata.broker.list=10.10.10.127:9092
producer.sinks.r.zk.connect=10.10.10.127:2181
producer.sinks.r.partition.key=0
producer.sinks.r.partitioner.class=org.apache.flume.plugins.SinglePartition
producer.sinks.r.serializer.class=kafka.serializer.StringEncoder
producer.sinks.r.request.required.acks=0
producer.sinks.r.max.message.size=1000000
producer.sinks.r.producer.type=sync
producer.sinks.r.custom.encoding=UTF-8
producer.sinks.r.custom.topic.name=test

#Specify the channel the sink should use
producer.sinks.r.channel = c

# Each channel's type is defined.
producer.channels.c.type = memory
producer.channels.c.capacity = 1000
producer.channels.c.transactionCapacity=100
#producer.channels.c.type=file
#producer.channels.c.checkpointDir=/home/checkdir
#producer.channels.c.dataDirs=/home/datadir

验证flume和kafka组合

前面kafka已经启动,这里直接启动flume
# bin/flume-ng  agent -c conf -f conf/master.properties -n producer -Dflume.root.logger=INFO,console
 
wKiom1RHJs-RUiZCABf8lQG-d6w703.jpg (610.4 KB, 下载次数: 0)
下载附件  保存到相册
2014-10-23 09:29 上传


使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;
 
wKiom1RHW6bwiJWUAAwelWX_Eh0824.jpg (310.01 KB, 下载次数: 0)

下载附件  保存到相册

2014-10-23 09:29 上传
可以看到tail /var/log/messages已经通过flume传到kafka里,说明flume+kafka组合已经成功了。

日志最终需要保存在hdfs里

还需要自己开发插件去实现,这里不再多说。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值