当前位置:  编程技术>综合
本页文章导读:
    ▪SPEL的helloWorld      package com.feng.spring.chapter2.helloworld; import junit.framework.Assert; import org.junit.Test; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.Expr.........
    ▪linux内核中的文件描述符(六)--fd的分配--expand_files      linux内核中的文件描述符(六)--fd的分配--expand_filesKernel version:2.6.14CPU architecture:ARM920TAuthor:ce123(http://blog.csdn.net/ce123) 我们先贴出expand_files函数的源码:int expand_files(struct files_struct *files, int nr.........
    ▪sqoop安装配置      sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具 sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.jar,所以你需要下载hadoop-0.20.2-CDH3B4.tar.gz,解压缩后将.........

[1]SPEL的helloWorld
    来源: 互联网  发布时间: 2013-11-10
package com.feng.spring.chapter2.helloworld;



import junit.framework.Assert;

import org.junit.Test;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;


public class HelloTest {
		@Test
		public void helloWorld(){
			ExpressionParser parser = new SpelExpressionParser();//创建解析器
			Expression expression = parser.parseExpression("('Hello '+'World').concat(#end)");//解析表达式
			EvaluationContext context = new StandardEvaluationContext();//构造上下文
			context.setVariable("end", "!");
			Assert.assertEquals("Hello World!", expression.getValue(context));  //求值,根据上下文获得表达式
		}
}

作者:howlaa 发表于2013-1-11 15:35:51 原文链接
阅读:32 评论:0 查看评论

    
[2]linux内核中的文件描述符(六)--fd的分配--expand_files
    来源: 互联网  发布时间: 2013-11-10

linux内核中的文件描述符(六)--fd的分配--expand_files

Kernel version:2.6.14

CPU architecture:ARM920T

Author:ce123(http://blog.csdn.net/ce123)

我们先贴出expand_files函数的源码:

int expand_files(struct files_struct *files, int nr)
{
	int err, expand = 0;
	struct fdtable *fdt;

	fdt = files_fdtable(files);
	if (nr >= fdt->max_fdset || nr >= fdt->max_fds) {   //我们在前面的文章中已经分析过,初始时max_fdset = 1024,max_fds = 32
		if (fdt->max_fdset >= NR_OPEN ||   //#define NR_OPEN (1024*1024)	/* Absolute upper limit on fd num */
			fdt->max_fds >= NR_OPEN || nr >= NR_OPEN) {
			err = -EMFILE;  //max_fdset和max_fds都不能大于 NR_OPEN,否则返回 -EMFILE,即打开太多的文件

			goto out;
		}
		expand = 1;
		if ((err = expand_fdtable(files, nr)))//真正进行扩展
			goto out;
	}
	err = expand;
out:
	return err;
}

expand_files函数进行一些检查后调用expand_fdtable进行文件描述符表的扩展,下面分析expand_fdtable函数。

static int expand_fdtable(struct files_struct *files, int nr)
	__releases(files->file_lock)
	__acquires(files->file_lock)
{
	int error = 0;
	struct fdtable *fdt;
	struct fdtable *nfdt = NULL;

	spin_unlock(&files->file_lock);
	nfdt = alloc_fdtable(nr);//根据nr重新创建一个新的fdtable
	if (!nfdt) {
		error = -ENOMEM;
		spin_lock(&files->file_lock);
		goto out;
	}

	spin_lock(&files->file_lock);
	fdt = files_fdtable(files);
	/*
	 * Check again since another task may have expanded the
	 * fd table while we dropped the lock
	 */
	if (nr >= fdt->max_fds || nr >= fdt->max_fdset) { //nr值必须大于max_fds和max_fdset值,这里再次进行检查是防止另一个进程进行了expand
		copy_fdtable(nfdt, fdt); //将旧的fdtable中的内容拷贝至新的fdtable
	} else {
		/* Somebody expanded while we dropped file_lock */
		spin_unlock(&files->file_lock);
		__free_fdtable(nfdt);
		spin_lock(&files->file_lock);
		goto out;
	}
	rcu_assign_pointer(files->fdt, nfdt);//用新的fdtable替换旧的fdtable  
	free_fdtable(fdt);//释放旧的fdtable 
out:
	return error;
}
我们再来看一下扩展文件描述符表的关键函数alloc_fdtable,其定义如下:

static struct fdtable *alloc_fdtable(int nr)
{
	struct fdtable *fdt = NULL;
	int nfds = 0;
  	fd_set *new_openset = NULL, *new_execset = NULL;
	struct file **new_fds;

	fdt = kmalloc(sizeof(*fdt), GFP_KERNEL);
	if (!fdt)
  		goto out;
	memset(fdt, 0, sizeof(*fdt));

	nfds = __FD_SETSIZE;  //#define __FD_SETSIZE	1024
    		      //  #define PAGE_SHIFT		12
    		      //  #define PAGE_SIZE		(1UL << PAGE_SHIFT)
  	/* Expand to the max in easy steps */
  	do {
		if (nfds < (PAGE_SIZE * 8))//dfds = 1024
			nfds = PAGE_SIZE * 8;
		else {
			nfds = nfds * 2;
			if (nfds > NR_OPEN)
				nfds = NR_OPEN;
		}
	} while (nfds <= nr);//第一次expand时,nr应该等于32

  	new_openset = alloc_fdset(nfds);//分配打开文件位图
  	new_execset = alloc_fdset(nfds);
  	if (!new_openset || !new_execset)
  		goto out;
	fdt->open_fds = new_openset;
	fdt->close_on_exec = new_execset;
	fdt->max_fdset = nfds;//更新max_fdset值,此时这个值为32k

	nfds = NR_OPEN_DEFAULT;//nfds = 32
	/*
	 * Expand to the max in easy steps, and keep expanding it until
	 * we have enough for the requested fd array size.
	 */
	do {
#if NR_OPEN_DEFAULT < 256
		if (nfds < 256)
			nfds = 256;//nfds = 256(32->256->1024)
			//无法超过1024,因为在最开始的就进行了检查,一定要小于current->signal->rlim[RLIMIT_NOFILE].rlim_cur)
		else
#endif
		if (nfds < (PAGE_SIZE / sizeof(struct file *)))
			nfds = PAGE_SIZE / sizeof(struct file *);
		else {
			nfds = nfds * 2;
			if (nfds > NR_OPEN)
				nfds = NR_OPEN;
  		}
	} while (nfds <= nr);
	new_fds = alloc_fd_array(nfds);//分配文件描述符数组
	if (!new_fds)
		goto out;
	fdt->fd = new_fds;
	fdt->max_fds = nfds;//更新max_fds
	fdt->free_files = NULL;
	return fdt;
out:
  	if (new_openset)
  		free_fdset(new_openset, nfds);
  	if (new_execset)
  		free_fdset(new_execset, nfds);
	kfree(fdt);
	return NULL;
}
alloc_fd_array和alloc_fdset采用kmalloc或者vmalloc进行内存分配。

作者:ce123 发表于2013-1-11 15:34:48 原文链接
阅读:29 评论:0 查看评论

    
[3]sqoop安装配置
    来源: 互联网  发布时间: 2013-11-10

sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具
sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.jar,所以你需要下载hadoop-0.20.2-CDH3B4.tar.gz,解压缩后将hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar复制到sqoop-1.2.0-CDH3B4/lib中。我们只需要hadoop-core-0.20.2-CDH3B4.jar,hadoop的环境我们还可以使用Apache的开源hadoop。
下面是CDH3和SQOOP 1.2.0的下载地址
http://archive.cloudera.com/cdh/3/hadoop-0.20.2-CDH3B4.tar.gz
http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4.tar.gz

另外,sqoop导入mysql数据运行过程中依赖mysql-connector-java-*.jar,
2、修改SQOOP的文件configure-sqoop,注释掉hbase和zookeeper检查(除非你准备使用HABASE等HADOOP上的组件)

#if [ ! -d "${HBASE_HOME}" ]; then
# echo “Error: $HBASE_HOME does not exist!”
# echo ‘Please set $HBASE_HOME to the root of your HBase installation.’
# exit 1
#fi
#if [ ! -d "${ZOOKEEPER_HOME}" ]; then
# echo “Error: $ZOOKEEPER_HOME does not exist!”
# echo ‘Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.’
# exit 1
#fi

还有其他HBASE和ZOOKEEPER的部分也需要注释掉。

3.在使用sqoop之前需要首先启动hadoop

4.常用的sqoop命令:
1》列出mysql数据库中的所有数据库
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
2)连接mysql并列出数据库中的表
sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456
命令中的test为mysql数据库中的test数据库名称  username password分别为mysql数据库的用户密码
3)将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制过去。
 sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table sqoop_test --username root --password 123456 --hive-table test
其中 --table sqoop_test为mysql中的数据库test中的表   --hive-table test 为hive中新建的表名称
4)从关系数据库导入文件到hive中
sqoop import --connect jdbc:mysql://localhost:3306/zxtest --username root --password 123456 --table sqoop_test --hive-import --hive-table s_test -m 1
5)将hive中的表数据导入到mysql中,在进行导入之前,mysql中的表hive_test必须已经提起创建好了。
sqoop export --connect jdbc:mysql://localhost:3306/zxtest --username root --password root --table hive_test --export-dir /user/hive/warehouse/new_test_partition/dt=2012-03-05
6》从数据库导出表的数据到HDFS上文件
 sqoop import --connect jdbc:mysql://localhost:3306/zxtest --username root --password 123456 --table hive_test -m 1

作者:keda8997110 发表于2013-1-11 15:34:14 原文链接
阅读:31 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
网站运营/SEO iis7站长之家
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3