Architecture

搭建简单的Hadoop集群

声明:这里要搭的集群很简单,仅供研究学习使用: 1. 绝大部分参数都用默认值 2. Name Node 和 Job Tracker共用一台机器 3. 没有Secondary Name Node 在master机上生成ssh所需的key-pair $ssh-keygen -t rsa 为了方便,shell提示输入passphrase时可以直接按回车 让每台机(包括master机本身)都信任master机器 以worker1机器为例, ##在master机上 $scp ~/.ssh/id_rsa.pub worker1:~/hadoop/namenode_rsa.pub ##在worker1上 $cat ~/hadoop/namenode_rsa.pub >> ~/.ssh/authorized_keys ##试着从master直接登录到worker1上,看看是不是可以免输密码 $ssh worker 在master上指定相关的workers 引用 ##修改conf/slaves worker1 worker2 这个文件不必同步到worker机器上 修改master机器的配置文件并同步到其他机器 <!–修改conf/core-site.xml–> <configuration> <property> <name>fs.default.name</name> <value>hdfs://master/</value> </property> </configuration> <!–修改conf/hdfs-site.xml–> <configuration> <property> <name>dfs.name.dir</name> <value>/home/kent/hadoop/name</value> </property> <property> <name>dfs.data.dir</name> <value>/home/kent/hadoop/data</value> …

搭建简单的Hadoop集群 Read More »

例示Hive + Sqoop Export

做完Hive分析后,怎么让普通用户通过web界面访问你的分析结果? 最直接的办法是将分析结果存为另一张Hive表,然后让web应用通过hive jdbc连接这张表。 这种做法的坏处是:Hive结果表在被查询时会临时起MapReduce任务,这对快速返回查询结果不利;如果结果表本身比较大、并且查询方式本身还有点复杂的话,那响应就更慢了,因为Hive对查询的优化能力跟RDBMS没法比。 所以最好把hive结果表再通过sqoop导入到rdbms的一张表中,以适应OLTP环境下的各种查询。 这里以日志分析为例。 假设你拿到了若干很大的日志文件并已存为Hive表,业务方要求你返回总的访问次数、总的访问用户数、访问次数最多的10个用户 第一步当然是对Hive日志表进行分析。由于用户数并非海量,所以结果表可以存成<user_name_id, visit_count>这种格式,最好再导到RDBMS中 create table visiting_user (usernameid string, visitcount int); –创建Hive结果表 insert overwrite table visiting_user — 统计分析 select usernameid, visitcount from (select usernameid, count(*) as visitcount from coupon11_log group by usernameid) stats order by visitcount desc limit 10; 然后把Hive结果表导入mysql create table visiting_user (usernameid varchar(50), visitcount int); –在mysql中创建结果表 $sqoop export –connect …

例示Hive + Sqoop Export Read More »

简单的Sqoop安装、使用示例

Hadoop相关的东西在版本兼容性方面都很麻烦,这个例子里用的Sqoop是1.4.2, Hadoop是Apache的1.0.4; 本例介绍的方法未必适用其他版本的Sqoop和Hadoop. 1.安装Sqoop 下载、解压 略 编译 $ant -Dhadoopversion=100 #这里的100表示编译后的Sqoop将与Hadoop 1.0.*结合使用 配置$HADOOP_HOME变量 Sqoop不认$HADOOP_INSTALL变量,只认$HADOOP_HOME, 所以要把$HADOOP_HOME配置到环境变量中 试运行一下 $sqoop version 2.从mysql中导入数据到HDFS 先把HADOOP启起来 MapReduce服务和HDFS服务都要启起来 把mysql jdbc驱动丢到sqoop的类目录下 $cp mysql-connector-java-5.1.6.jar /home/kent/dev/hadoop/sqoop-1.4.2/lib/ 执行sqoop import $sqoop import –connect jdbc:mysql://localhost/kent –username kent –password *** –table user –verbose –target-dir /sqoop/user –fields-terminated-by ‘\0001’ ##导出后的hdfs文件将在/sqoop/user路径下 ##导出后的hdfs文件中列之间将以’\0001’分隔 观察一下控制台输出,   a. 生成了 /tmp/sqoop-kent/compile/b54fd32800d1ddb50c259c709464a35c/user.java   b. user.java被编译打包到了/tmp/sqoop-kent/compile/b54fd32800d1ddb50c259c709464a35c/user.jar   c. 观察Hadoop的控制台,可以看到有新的MapReduce …

简单的Sqoop安装、使用示例 Read More »

搭建ZooKeeper Standalone环境

无干货,仅供复制 1. 下载、解压 略 2. 配置 引用 #conf/zoo.cfg tickTime=2000 dataDir=/home/kent/dev/hadoop/zookeeper-3.4.5/dataStore clientPort=2181 3. 启动 引用 $zkServer.sh start-foreground  4. 验证 引用 $telnet localhost 2181 $>ruok  #zookeeper支持的四字短语之一 5. 用Java API创建一个结点 <!–pom.xml–> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> </dependency> public class FirstNode { public static void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper("localhost", 1000, null); while (zk.getState() != …

搭建ZooKeeper Standalone环境 Read More »

例示:用Zookeeper搭建服务注册中心

用Zookeeper搭建一个服务注册中心:不断有ServiceProvider上来注册自己的进程ID或者与注册中心断开,ServiceConsumer则捕捉这些变化。 1.创建一个根结点,所有注册信息都将挂这个结点的下面 public class RegistryStartup { public static void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper("localhost", 1000, null); while (zk.getState() != States.CONNECTED) { ;//wait } Stat rootExists = zk.exists("/serviceProviderRoot", false); if (rootExists == null) { zk.create("/serviceProviderRoot", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } System.out.println("The node ‘/serviceProviderRoot’ has been created"); } } 2.ServiceProvider注册自己的进程号 <!–pom.xml, 引入一个库,以帮助获取当前进程的ID–> <dependency> …

例示:用Zookeeper搭建服务注册中心 Read More »

搭建hbase的pseudo distributed环境

无干货,仅供复制 选择与你的hadoop兼容的hbase版本 我的hadoop是1.0.4版本。经试验发现与hbase 0.90不兼容,后来改用hbase 0.94.2就可以了。 配置hbase <!– conf/hbase-site.xml –> <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> <!–假定你的hdfs namenode也装在本机–> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration> 启动hbase 引用 #start-hbase.sh  #这里假定hdfs已经启动 查看web控制台验证启动是否成功 引用 http://localhost:60010 停止hbase 引用 #stop-hbase.sh 常见问题 如果在hbase日志里看到 引用 java.io.IOException: Call to localhost/127.0.0.1:8020 failed on local exception: java.io.EOFException 应该再去hdfs日志里看一下有没有相关的信息。比如 引用 2012-12-02 15:21:31,650 WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from …

搭建hbase的pseudo distributed环境 Read More »

Why hbase?

摘自象书 Q: 为什么不直接用mysql? A: mysql无法自动分表分库,手动分又比较复杂 Q: 为什么不用Hive? A: Hive只适合批量的、比较慢的数据处理,不方便做单行的、立即响应的处理

hbase跟hadoop的关系

HBase是独立项目 虽然HBase一开始是作为Hadoop的子项目存在的,但现在它已经是apache顶级项目了. 在使用时,HBase也只是用作NoSql数据库,跟Hadoop的MapReduce没有必然联系。 不过,两者之间还是有很多相关的地方: 相关点 1.HBase数据的存储用的是Hadoop文件的API,实际的存储一般也是HDFS 2.HBase经常用作MapReduce的数据源或者目标输出 3.HBase的分布式架构模仿了Hadoop的风格,也是一主多从 4.HBase的配置文件名、配置项的名字也尽量与Hadoop一致。