测试服务器- Zookeeper安装手记

1.解压zookeeper-3.4.6.tar.gz到重命名到/opt/bigdata/zookeeper下 

2.创建文件夹
  1. #进入到Zookeeper安装目录执行
  2. mkdir data
  3. mkdir log
3.进入到conf中复制并修改zoo.cfg文件
  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. # do not use /tmp for storage, /tmp here is just
  11. # example sakes.
  12. dataDir=/opt/bigdata/zookeeper/data
  13. dataLogDir=/opt/bigdata/zookeeper/log
  14. # the port at which the clients will connect
  15. clientPort=2181
  16. # the maximum number of client connections.
  17. # increase this if you need to handle more clients
  18. #maxClientCnxns=60
  19. #
  20. # Be sure to read the maintenance section of the
  21. # administrator guide before turning on autopurge.
  22. #
  23. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  24. #
  25. # The number of snapshots to retain in dataDir
  26. #autopurge.snapRetainCount=3
  27. # Purge task interval in hours
  28. # Set to "0" to disable auto purge feature
  29. #autopurge.purgeInterval=1
  30. server.1=m1:2888:3888
  31. server.2=m2:2888:3888
  32. server.3=m3:2888:3888
4.添加zk节点的myid,在data文件夹中
  1. #这个id 在别的机器上需要修改,根据zoo.cfg中声明的填写
  2. echo 1 > /opt/bigdata/zookeeper/conf/myid
5.分发整个文件夹到别的节点
  1. cd /opt/bigdata/
  2. #下面这个是我写的批量scp脚本
  3. #语法是:
  4. #Usage: /usr/bin/scp_many filename targetname host[s]
  5. #e.g: /usr/bin/scp_many love.txt /home/love.txt v2,v3,v4
  6. scp_many ./zookeeper/ $PWD m2,m3
6.执行zkServer.sh start然后在status看状态就好了。
批量scp脚本:
  1. #!/bin/bash
  2. # description: scp file to many hosts
  3. filename=$1
  4. targetname=$2
  5. hosts=$3
  6. if [ $# -lt 3 ];then
  7. echo -e "Usage:\033[45;37m $0 filename targetname host[s] \033[0m"
  8. echo -e "e.g:\033[45;37m $0 love.txt /home/love.txt v2,v3,v4\033[0m"
  9. exit 1
  10. fi
  11. #for host in $(echo $3|awk -F,)
  12. for host in ${hosts//,/ }
  13. do
  14. cmd="scp -r $filename $host:$targetname"
  15. echo -e "$\033[46;37m$cmd\033[0m"
  16. $cmd
  17. done

sqoop 和mysql相关操作

数据迁移工具,可以和RDBMS相互迁移数据

需要先将db driver copy to sqoop lib dir
注意:
    sqoop是以mapreduce的方式来运行任务的,用hdfs来存储数据的。所以依赖NameNode和ResourceManager,只要机器上配置了这两个就可以正常运行,程序运行时会自动读取环境变量. (更多…)

hive UDF笔记

1.编写代码

  1. package com.billstudy.udf;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.apache.hadoop.hive.ql.exec.UDF;
  5. import org.apache.hadoop.io.Text;
  6. /**
  7. * 自定义UDF函数
  8. * @author Bill
  9. * @since V1.0 2015年6月14日 - 下午10:33:00
  10. */
  11. public class NationUDF extends UDF{
  12. public static Map<String,String> nationMap = new HashMap<String,String>();
  13. static {
  14. nationMap.put("china", "中国");
  15. nationMap.put("japan", "日本");
  16. nationMap.put("usa", "美国");
  17. }
  18. private Text returnNation = new Text();
  19. /**
  20. * 名称必须是evaluate
  21. * @author Bill
  22. * @since V1.0 2015年6月14日 - 下午10:32:41
  23. * @param nationKey
  24. * @return
  25. */
  26. public Text evaluate(Text nationKey){
  27. String nation = nationMap.get(nationKey.toString());
  28. if (nation == null) {
  29. nation = "未知";
  30. }
  31. returnNation.set(nation);
  32. return returnNation;
  33. }
  34. }

(更多…)

ZooKeeper典型应用场景一览

ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。

(更多…)

Hadoop 2.4.1 搭建Ha遇到问题记录

  1. 15/06/19 17:12:44 ERROR namenode.FSNamesystem: FSNamesystem initialization failed.
  2. java.io.IOException: Invalid configuration: a shared edits dir must not be specified if HA is not enabled. // 明明我配置了HA,却说没有,下面的配置写错了
  3. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:710)
  4. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:654)
  5. at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:892)
  6. at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1310)
  7. at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1424)
  8. 15/06/19 17:12:44 INFO namenode.FSNamesystem: Stopping services started for active state
  9. 15/06/19 17:12:44 FATAL namenode.NameNode: Exception in namenode join
  10. java.lang.NullPointerException
  11. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.stopActiveServices(FSNamesystem.java:1118)
  12. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.close(FSNamesystem.java:1446)
  13. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:781)
  14. at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:654)
  15. at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:892)
  16. at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1310)
  17. at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1424)
  18. 15/06/19 17:12:44 INFO util.ExitUtil: Exiting with status 1
  19. 15/06/19 17:12:44 INFO namenode.NameNode: SHUTDOWN_MSG:
  20. /************************************************************
  21. SHUTDOWN_MSG: Shutting down NameNode at v1/192.168.32.91
  22. ************************************************************/

(更多…)

ganglia监控hadoop相关配置及监控指标说明

  1. 修改配置文件:$HADOOP_HOME/etc/hadoop/hadoop-metrics.properties
  2. 添加如下内容:
  3. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
  4. *.sink.ganglia.period=10
  5. # default for supportsparse is false
  6. *.sink.ganglia.supportsparse=true
  7. *.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
  8. *.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
  9. #192.168.0.100组播地址 8801是接受和发送数据端口
  10. namenode.sink.ganglia.servers=239.2.11.71:8801
  11. datanode.sink.ganglia.servers=239.2.11.71:8801
  12. jobtracker.sink.ganglia.servers=239.2.11.71:8801
  13. tasktracker.sink.ganglia.servers=239.2.11.71:8801
  14. maptask.sink.ganglia.servers=239.2.11.71:8801
  15. reducetask.sink.ganglia.servers=239.2.11.71:8801
  16. 各项控制指标说明: dfs.datanode.blockChecksumOp_avg_time 块校验平均时间
  17. dfs.datanode.blockChecksumOp_num_ops 块检验次数
  18. dfs.datanode.blockReports_avg_time 块报告平均时间
  19. dfs.datanode.blockReports_num_ops 块报告次数
  20. dfs.datanode.block_verification_failures 块验证失败次数
  21. dfs.datanode.blocks_read 从硬盘读块总次数
  22. dfs.datanode.blocks_removed 删除块数目
  23. dfs.datanode.blocks_replicated 块复制总次数
  24. dfs.datanode.blocks_verified 块验证总次数
  25. dfs.datanode.blocks_written 向硬盘写块总次数
  26. dfs.datanode.bytes_read 读出总字节包含crc验证文件字节数
  27. dfs.datanode.bytes_written 写入总字节数(在写入每个packet时计数)
  28. dfs.datanode.copyBlockOp_avg_time 复制块平均时间 (单位ms
  29. dfs.datanode.copyBlockOp_num_ops 复制块次数
  30. dfs.datanode.heartBeats_avg_time namenode汇报平均时间
  31. dfs.datanode.heartBeats_num_ops namenode汇报总次数
  32. dfs.datanode.readBlockOp_avg_time 读块平均时间(单位ms
  33. dfs.datanode.readBlockOp_num_ops 读块总次数 一般和dfs.datanode.blocks_read 一致,先从硬盘读入输入流,增加dfs.datanode.blocks_read 计数,然后再增加该计数
  34. dfs.datanode.reads_from_local_client 从本地读入块次数
  35. dfs.datanode.reads_from_remote_client 从远程读入块次数
  36. dfs.datanode.replaceBlockOp_avg_time 替换块平均时间(负载均衡策略)
  37. dfs.datanode.replaceBlockOp_num_ops 替换块次数(负载均衡策略)
  38. dfs.datanode.volumeFailures notfound block拥有的volume 失败有关
  39. dfs.datanode.writeBlockOp_avg_time 写块平均时间
  40. dfs.datanode.writeBlockOp_num_ops 写块总次数一般和dfs.datanode.blocks_written 一致,先从硬盘,增加dfs.datanode.blocks_read 计数,然后再增加该计数
  41. dfs.datanode.writes_from_local_client 写本地次数
  42. dfs.datanode.writes_from_remote_client 写远程次数
  43. jvm.metrics.gcCount gc总次数
  44. jvm.metrics.gcTimeMillis gc总耗时(ms)
  45. jvm.metrics.logError jvm error 次数
  46. jvm.metrics.logFatal jvm出现fatal次数
  47. jvm.metrics.logInfo jvm info出现次数
  48. jvm.metrics.logWarn jvm warn出现次数
  49. jvm.metrics.maxMemoryM jvm试图使用最大内存(M),如果没有限制返回Long.MAX_VALUE
  50. jvm.metrics.memHeapCommittedM jvm提交堆内存大小
  51. jvm.metrics.memHeapUsedM jvm使用堆内存大小
  52. jvm.metrics.memNonHeapCommittedM jvm非堆内存已提交大小
  53. jvm.metrics.memNonHeapUsedM jvm非堆内存已使用大小
  54. jvm.metrics.threadsBlocked 正在阻塞等待监视器锁的线程数目
  55. jvm.metrics.threadsNew 尚未启动的线程数目
  56. jvm.metrics.threadsRunnable 正在执行状态的线程数目
  57. jvm.metrics.threadsTerminated 已退出线程数目
  58. jvm.metrics.threadsTimedWaiting 等待另一个线程执行取决于指定等待时间的操作的线程数目
  59. jvm.metrics.threadsWaiting 无限期地等待另一个线程来执行某一特定操作的线程数目
  60. rpc.metrics.NumOpenConnections number of open connections rpc连接打开的数目
  61. rpc.metrics.ReceivedBytes number of bytes received rpc收到的字节数
  62. rpc.metrics.RpcProcessingTime_avg_time Average time for RPC Operations in last interval rpc在最近的交互中平均操作时间
  63. rpc.metrics.RpcProcessingTime_num_ops rpc在最近的交互中连接数目
  64. rpc.metrics.RpcQueueTime_avg_time rpc在交互中平均等待时间
  65. rpc.metrics.RpcQueueTime_num_ops rpc queue中完成的rpc操作数目
  66. rpc.metrics.SentBytes number of bytes sent rpc发送的数据字节
  67. rpc.metrics.callQueueLen length of the rpc queue rpc 队列长度
  68. rpc.metrics.rpcAuthenticationFailures number of failed authentications rpc 验证失败次数
  69. rpc.metrics.rpcAuthenticationSuccesses number of successful authentications 验证成功数
  70. rpc.metrics.rpcAuthorizationFailures number of failed authorizations 授权失败次数
  71. rpc.metrics.rpcAuthorizationSuccesses number of successful authorizations 成功次数
  72. mapred.shuffleInput.shuffle_failed_fetches map输出中取数据过程中获取失败次数
  73. mapred.shuffleInput.shuffle_fetchers_busy_percent 在获取map输出过程中并行获取线程忙碌占总并行获取线程百分比
  74. mapred.shuffleInput.shuffle_input_bytes shuffle过程中读入数据字节
  75. mapred.shuffleInput.shuffle_success_fetches map输出中取数据过程中获取成功次数
  76. mapred.shuffleOutput.shuffle_failed_outputs reduce发送map输出失败次数
  77. mapred.shuffleOutput.shuffle_handler_busy_percent reduce发送map输出中server线程忙碌占总工作线程(在tasktracker.http.threads中配置)百分比。
  78. mapred.shuffleOutput.shuffle_output_bytes shuffle过程中输出数据字节
  79. mapred.shuffleOutput.shuffle_success_outputs reduce成功
  80. mapred.tasktracker.mapTaskSlots 设置map槽数
  81. mapred.tasktracker.maps_running 正在运行的map
  82. mapred.tasktracker.reduceTaskSlots 设置reduce槽数
  83. mapred.tasktracker.reduces_running 正在运行的reduce
  84. mapred.tasktracker.tasks_completed 完成任务数
  85. mapred.tasktracker.tasks_failed_ping tasktrackertask交互失败导致的失败的task数目
  86. mapred.tasktracker.tasks_failed_timeout task未在mapred.task.timeout配置的(默认10分钟)时间内汇报进度而超时killtask数目
  87. rpc.detailed-metrics.canCommit_avg_time rpc询问是否提交任务平均时间
  88. rpc.detailed-metrics.canCommit_num_ops rpc询问是否提交任务次数
  89. rpc.detailed-metrics.commitPending_avg_time rpc报告任务提交完成,但是该提交仍然处于pending状态的平均时间
  90. rpc.detailed-metrics.commitPending_num_ops rpc报告任务提交完成,但是该提交仍然处于pending状态的次数
  91. rpc.detailed-metrics.done_avg_time rpc报告任务成功完成的平均时间
  92. rpc.detailed-metrics.done_num_ops rpc报告任务成功完成的次数
  93. rpc.detailed-metrics.fatalError_avg_time rpc报告任务出现fatalerror的平均时间
  94. rpc.detailed-metrics.fatalError_num_ops rpc报告任务出现fatalerror的次数
  95. rpc.detailed-metrics.getBlockInfo_avg_time 从指定datanode获取block的平均时间
  96. rpc.detailed-metrics.getBlockInfo_num_ops 从指定datanode获取block的次数
  97. rpc.detailed-metrics.getMapCompletionEvents_avg_time reduce获取已经完成的map输出地址事件的平均时间
  98. rpc.detailed-metrics.getMapCompletionEvents_num_ops reduce获取已经完成的map输出地址事件的次数
  99. rpc.detailed-metrics.getProtocolVersion_avg_time 获取rpc协议版本信息的平均时间
  100. rpc.detailed-metrics.getProtocolVersion_num_ops 获取rpc协议版本信息的次数
  101. rpc.detailed-metrics.getTask_avg_time 当子进程启动后,获取jvmtask的平均时间
  102. rpc.detailed-metrics.getTask_num_ops 当子进程启动后,获取jvmtask的次数
  103. rpc.detailed-metrics.ping_avg_time 子进程周期性的检测父进程是否还存活的平均时间
  104. rpc.detailed-metrics.ping_num_ops 子进程周期性的检测父进程是否还存活的次数
  105. rpc.detailed-metrics.recoverBlock_avg_time 为指定的block开始恢复标记生成的平均时间
  106. rpc.detailed-metrics.recoverBlock_num_ops 为指定的block开始恢复标记生成的次数
  107. rpc.detailed-metrics.reportDiagnosticInfo_avg_time 向父进程报告任务错误消息的平均时间,该操作应尽可能少,这些消息会在jobtracker中保存
  108. rpc.detailed-metrics.reportDiagnosticInfo_num_ops 向父进程报告任务错误消息的次数
  109. rpc.detailed-metrics.startBlockRecovery_avg_time 开始恢复block的平均时间
  110. rpc.detailed-metrics.startBlockRecovery_num_ops 开始恢复block的次数
  111. rpc.detailed-metrics.statusUpdate_avg_time 汇报子进程进度给父进程的平均时间
  112. rpc.detailed-metrics.statusUpdate_num_ops 汇报子进程进度给父进程的次数
  113. rpc.detailed-metrics.updateBlock_avg_time 更新block到新的标记及长度的平均操作时间
  114. rpc.detailed-metrics.updateBlock_num_ops 更新block到新的标记及长度的次数
  115. 参考资料:http://anyoneking.com/archives/677

(更多…)