Month: November 2012

使用fastjson往浏览器输出字符串时应使用的参数

使用fastjson往浏览器输出字符串时,应该在调用fastjson API时使用以下两个参数: 1. SerializerFeature.DisableCircularReferenceDetect 2. SerializerFeature.BrowserCompatible 如果不使用第1个参数且传入的对象中有小对象被引用两次(比如map中两个key共用一个value对象),就可能导致输出的json中出现$ref等字样 如果不使用第2个参数,则有可能出现浏览器兼容问题

[Hadoop] 例示Hive的使用

这篇文章介绍如何用hive来分析一个网站访问日志文件。这里假定你已经安装好了一个跟hadoop集群(pseudo mode亦可)协作的hive,如果还没有,看 这里 建表 hive> create table coupon11_log (day string, time string, usernameid string, ip string, url string) row format serde ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe’ with serdeproperties( “input.regex” = “([^\\s]+)\\s+([^\\s]+)\\s+[^\\s]+\\s+[^\\s]+\\s+[^\\s]+\\s+[^\\s]+\\s+\-\\s+userNameId\-([^\\s]+)\\s+from\\s+IP\-([^\\s]+)\\s+invoked\\s+URL\-([^\\s]+).*” ); — 这个正则表达式就是访问日志的正则,一共5个括号,对应表里的5列 从HDFS载入数据文件到表中 hive> load data inpath ‘/user/coupon11log’ overwrite into table coupon11_log; –这里其实只会复制文件,不会解析它,所以这一步很快 select * from coupon11_log limit 10; — 小看一下装载进来的数据 试一个简单的统计查询 hive> select url, count(*) as …

[Hadoop] 例示Hive的使用 Read More »

[Hadoop]搭建Hive环境

无干货,仅供复制 注:这里假定机器上已经运行了一个pseudo mode的hadoop 1.下载、解压 2.把HIVE_INSTALL/bin 加入到path中 3.配置相关的hadoop信息 <!–HIVE_INSTALL/conf/hive-site.xml–> <configuration> <!–跟hadoop下的cores-site.xml一致–> <property> <name>fs.default.name</name> <value>hdfs://localhost/</value> </property> <!–跟hadoop下的mapret-site.xml一致–> <property> <name>mapred.job.tracker</name> <value>localhost:8021</value> </property> </configuration> 4. 在hadoop服务器上执行hive查询时需要用到hive的一个库,需要在hive里配置。 <!–HIVE_INSTALL/conf/hive-site.xml–> <property> <name>hive.aux.jars.path</name> <value>/home/kent/hive-contrib-0.9.0.jar</value> </property> 当然,要把这个库从本地复制到hdfs中, 引用 #hadoop fs -copyFromLocal /home/kent/dev/hadoop/hive-0.9.0/lib/hive-contrib-0.9.0.jar /home/kent/hive-contrib-0.9.0.jar 5. 最后试一下 # echo ‘X’ > /tmp/dummy.txt # hive > create table dummy (value string); –建一个表 > load data local inpath …

[Hadoop]搭建Hive环境 Read More »

市面上的Hadoop云服务

摘自象书 1.Cloudera提供公有云和私有云 2.Aamzon有Elastic MapReduce服务 另外Apache有个项目Apache Whirr可以帮你在Amazon EC2上迅速搭建hadoop环境

Hadoop机器的典型配置

摘自象书 Processor    2 quad-core 2-2.5GHz CPUs, 一共8核 Memory    16-24 GB ECC RAM Storage    4 × 1TB SATA disks Network    Gigabit Ethernet 1.使用多核CPU,可以让单台worker机器起多个task,充分压榨机器的能力 2.除了NameNode,其他结点不需要使用RAID,因为HDFS自己会做replication

[Hadoop]MapReduce中的Join

摘自象书 首先,最好用Pig/Hive等做Join,避免手写很多代码 如果不用Pig/Hive,则有两种选择(假设有两个dataset, A和B): 1.Map-Side Joins   比较复杂,可以参见 org.apache.hadoop.examples.Join 2.Reduce-Side Joins   a.使用MultipleInputs将两个dataset都读进来,作为同一个Job的输入   b.两个dataset的mapper使用相同的output key, 以使两个mapper中key相同的output将出现在同一个reducer上 (严格地讲不是同一个key, 这里要自建partitioner来钻个空子,详见象书英文版p251)   c; 在reducer中实现Join逻辑  

hadoop支持的输入、输出类型

摘自象书 1. 文本:TextInpuFormat 2. 关系数据库: DBInputFormat    注意这是单个的数据源,没有Sharding. 如果数据很多,会有多个map task同时读它,可能导致数据库承受不了压力。 3. Hbase: TableInputFormat

[Hadoop]MultiInput和MultiOutput

摘自象书 一个Job里可以从多个同质或异质的输入源读取数据,并使用各自的Mapper MultipleInputs.addInputPath(conf, ncdcInputPath, TextInputFormat.class, MaxTemperatureMapper.class) MultipleInputs.addInputPath(conf, metOfficeInputPath, TextInputFormat.class, MetOfficeMaxTemperatureMapper.class); MultiOutputFormat可以让你按一定规则指定、分隔reduce output的文件名,如 … static class StationNameMultipleTextOutputFormat extends MultipleTextOutputFormat<NullWritable, Text> { private NcdcRecordParser parser = new NcdcRecordParser(); protected String generateFileNameForKeyValue(NullWritable key, Text value, String name) { parser.parse(value); return parser.getStationId(); } } … 另有MultiOutputs类,在此不表

[Hadoop]设置Task的jvm heap size

版本:hadoop 1.0.4 可以在这里设置: <!–mapred-site.xml–> <property> <name>mapred.child.java.opts</name> <value>-Xmx512m</value> </property> 有人说应该改hadoop-env.sh里的HADOOP_HEAPSIZE. 这是错的,HADOOP_HEAPSIZE是给一些HADOOP后台进程用的,不是给task用的