ORACLE连接HDFS有个专项的解决方案
- 格式:docx
- 大小:24.90 KB
- 文档页数:5
HDFS 保障可靠性的措施什么是HDFS?HDFS(Hadoop分布式文件系统)是Apache Hadoop项目的核心组件之一。
它的设计目标是运行在廉价硬件上并能够处理大型数据集(例如,具有超过千亿个文件和文件大小超过几百PB的数据集)。
HDFS采用了一种主/从结构的架构,其中一个节点(namenode)充当文件系统的管理者,而其他节点(datanodes)充当存储文件的工作者。
文件被分成块,每个块在多个datanodes上都有多个副本。
这种方式确保了数据的可靠性和快速访问速度。
可靠性的重要性对于大数据应用来说,数据的可靠性是至关重要的。
在这种环境下使用不可靠的存储系统可能会导致数据损坏,损失或不一致。
为了避免这些问题,HDFS采用了大量的技术来确保数据的可靠性和一致性。
HDFS保障可靠性的措施以下是HDFS维护数据可靠性的核心技术:数据复制在HDFS上存储的数据是通过复制机制进行保护的。
文件被划分为块,并在HDFS集群中的多个节点之间复制。
默认情况下,每个块被复制到三个datanode 上。
这种复制机制确保了即使出现故障,数据仍然可以在其他节点上找到。
数据块健康检查HDFS通过运行常规检查和修复操作来保持数据块的持久性和一致性。
HDFS通过两个进程来完成这项任务:namenode和datanode。
namenode通过一个“心跳”机制来检查集群中节点的健康状态。
如果namenode 检测到节点失踪(即,没有心跳信号),则节点将被标记为不可用。
datanode周期性地将块报告给namenode,并向namenode报告块状态和位置信息。
如果namenode检测到块已经丢失副本,则它会触发一系列的复制操作,以确保在其他节点上复制块。
数据节点冗余在HDFS上存储的数据会根据预定义的复制规则在多个节点上分散存储。
当一个节点失败时,系统会自动从其他可用节点上复制缺失的数据。
此外,HDFS还支持机架感知性策略,即尽可能地将副本部署到不同的机架中,这将极大程度地减少数据丢失的影响。
HDFS 数据可靠性保障措施概述Apache Hadoop Distributed File System(HDFS)是Apache Hadoop软件库中基于Java的分布式文件系统。
它是Java平台上最流行的分布式文件系统之一,主要设计目标是将大规模数据集存储于集群中,提供高吞吐量数据访问的能力,具备水平扩展性以及容错能力。
要保障大规模数据集的安全可靠,HDFS 提供了一系列的数据可靠性保障措施。
这些保障措施的目的是防止数据丢失,并保证数据的完整性,从而保证可靠的数据处理。
HDFS 数据可靠性保障措施数据复制数据复制是HDFS数据可靠性保证的基本措施之一。
HDFS通过将数据复制多份并存储到不同的计算机上来达到高可靠性的目的。
HDFS中的数据块在存储前首先需要进行切分,切分成若干个数据块,每个数据块会被复制到集群中的不同计算机上,保证了一旦某个计算机硬件故障或网络故障,数据仍然可以从其他计算机中读取到。
复制的数据块在HDFS文件系统中有一个主副本机制。
其中原始数据块被称为主副本,其余的复制数据块被称为次副本。
副本之间的数据转移发生在HDFS创建文件时,以及在数据丢失后的数据点恢复过程中。
该策略保证了HDFS数据不会因为节点故障而丢失,有利于提高数据的可靠性和稳定性。
数据块检验为保证数据可靠性,HDFS会对存储在分布式文件系统上的数据块进行定期检查,并对其进行纠错处理。
在HDFS中,数据块被分割成固定大小的块,每个块都有校验和。
在数据块读取时,HDFS会对数据块进行校验和计算,并与原始校验和比较,这个过程可以保证数据的完整性。
另外,HDFS 提供了一个条带功能(Stripe)。
他会将数据块按照一定的方式进行分割,保证数据块之间的数据分布均衡,并将数据块的校验和合并以提升数据访问效率。
文件访问时,只有满足所有数据块的条件才能对数据文件进行访问。
NN Checkpoint 和 QJMNameNode Checkpoint(NN Checkpoint)和Quorum Journal Manager(QJM)也是HDFS数据可靠性保证的重要措施。
数据存储解决方案数据存储是指将数据存储在各种存储介质中,以便在需要时能够访问和使用。
对于大部分企业来说,选择适合自己业务和预算的数据存储解决方案至关重要。
下面是一些常见的数据存储解决方案:1. 传统数据库:传统关系型数据库(如Oracle、MySQL)是最常见的数据存储解决方案之一。
它们使用表格来存储数据,并支持复杂的查询和事务处理。
这种解决方案可靠稳定,但对大规模数据处理能力有限。
2. 分布式文件系统:分布式文件系统(如Hadoop HDFS、Amazon S3)适用于海量数据存储和处理。
它们将数据分散存储在多个节点上,具有高可靠性和可扩展性。
这样的解决方案适用于需要处理大规模数据集的企业。
3. NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra)是另一种流行的数据存储解决方案。
它们区别于传统关系型数据库,通过键值对、文档或列族的形式存储数据。
NoSQL数据库可扩展性强,适用于高速写入和读取大量数据的场景。
4. 冷热数据分离:数据存储解决方案还可以针对数据的热度进行分离。
将常用的热数据存储在高性能存储介质(如固态硬盘)上,将不常用的冷数据存储在低成本存储介质(如云存储)上。
这种方法可以提高处理和存储效率,并减少成本。
5. 云存储:云存储是将数据存储在云服务提供商的服务器上。
云存储方便易用,无需建设和维护专门的数据中心。
同时,云存储还具有高可靠性和弹性扩展性,能够根据需求动态调整存储容量。
6. 存储虚拟化:存储虚拟化技术允许将多个物理存储资源虚拟化为一个统一的逻辑存储池。
这样可以提高存储利用率、简化管理,并提供灵活的存储分配和迁移功能。
综上所述,不同的企业有不同的需求,需要选择适合自己业务和预算的数据存储解决方案。
无论是传统数据库、分布式文件系统、NoSQL数据库还是冷热数据分离、云存储或存储虚拟化,都可以根据实际需求进行选择和部署。
解决oracle数据库“监听程序当前无法识别连接描述符中请求的服务”今晚搞了几个小时的oracle配置,现在终于连上了,同时也发现好多人每次重装系统后都得重装oracle,现将我如何处理这一类问题的方法分享如下,嘿嘿,百试不爽的我的oracle安装路径在F盘的app文件夹下,首先找到F:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN下的listener.ora和tnsnames.ora这两个文件,用记事本打开就可以用下面的这些代码替换listener.ora中原有的代码注:路径要是自己的安装路径# listener.ora Network Configuration File: F:\app\Administrator\product\11.1.0\db_1\network\admin\listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = F:\app\Administrator\product\11.1.0\db_1)(PROGRAM = extproc))(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = F:\app\Administrator\product\11.1.0\db_1)(SID_NAME = orcl)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))# tnsnames.ora Network Configuration File: F:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\tnsnames.ora# Generated by Oracle configuration tools.ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICA TED)(SERVICE_NAME = orcl)))EXTPROC_CONNECTION_DATA =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)))(CONNECT_DATA =(SID = PLSExtProc)(PRESENTATION = RO)))用下面的这些代码替换tnsnames.ora 中原有的代码# tnsnames.ora Network Configuration File: F:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\tnsnames.ora# Generated by Oracle configuration tools.ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICA TED)(SERVICE_NAME = orcl)))EXTPROC_CONNECTION_DATA =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)))(CONNECT_DATA =(SID = PLSExtProc)(PRESENTATION = RO)))替换完成之后重启oracle数据库服务就可以了。
sqoop mysql\oracle数据导入到hbase 各种异常解决 --columns指定字段细节注意最近使用sqoop把数据从oracle导入到hbase 遇到各种问题耗了很多时间遇到的异常在网上也没找到过先例可能有朋友也遇到了这样的问题整理一下留在这里欢迎拍砖看到的朋友如果有更好的方法可以回复一起学习使用sqoop 导mysql的数据时一切顺利很方便导oracle的时候问题就来了--query命令:使用这个命令的时候需要注意的是 where后面的参数,$CONDITIONS这个参数必须加上而且存在单引号与双引号的区别,如果--query后面使用的是双引号那么需要在$CONDITIONS加上\ 即 \$CONDITIONS./sqoop import --connect jdbc:oracle:thin:@192.168.8.130:1521:dcshdev--username User_data2 --password yhdtest123qa --query "select * from so_ext t where \$CONDITIONS " -m 4 --hbase-create-table --hbase-table hso--column-family so --hbase-row-key id --split-by id如果使用--columns指令来指定字段也出现了问题因为在一行中写太多命令是不可能的,--columns 如果字段太多在命令中写也不方便所以使用shell脚本要方便的多那么在脚本中换行使用 \ 来换行有个问题就是使用--columns 指定的字段大小写要注意得使用小写。
如果使用大写导数据不会有异常会成功的,hbase中表也会创建好,但是scan 的时候你会发现没有数据这个蛋疼吧--columns id,order_id,order_code而且每个字段之间用逗号分隔,但是不能有空格,在sqoop中没有处理空格,如果在这个命令后的参数有空格的话就不能和oracle表中的字段对应上了结果虽然没有错误能够显示成功导入多了条数据,但是scan的时候会是0条数据关于导mysql和oracle的时候还有个区别:导mysql表的数据时不需要指定太多的命令就可以成功导入,但是oracle就需要很多命令,如--split-by这个切分参数在导mysql的时候就不需要,但是如果在导oracle的时候不加上就会出错了不信你试试。
hdfs ec策略摘要:一、HDFS概述二、EC策略介绍三、HDFS+EC策略的优势四、HDFS EC策略的实施步骤五、面临的挑战与解决方案六、总结与展望正文:一、HDFS概述HDFS(Hadoop Distributed File System)是Hadoop生态系统中的核心组件,为大数据处理提供了一个高可靠性、高可扩展性的分布式文件系统。
HDFS采用主从架构,由一个NameNode和多个DataNode组成。
NameNode负责管理文件系统的命名空间和元数据,DataNode则负责存储实际的数据块。
二、EC策略介绍EC(Erasure Coding)策略是一种数据保护技术,通过对数据进行编码和解码,实现在多个数据块丢失的情况下仍能恢复数据。
在HDFS中,EC策略将数据分成多个数据块,并对这些数据块进行编码。
当部分数据块丢失时,通过解码其他数据块来恢复丢失的数据。
三、HDFS+EC策略的优势1.提高数据可靠性:EC策略可以实现在多个数据块丢失的情况下仍能恢复数据,提高了数据的可靠性。
2.提高存储空间利用率:相较于传统的副本策略,EC策略可以使用更少的存储空间来实现相同的数据保护效果。
3.降低成本:EC策略可以减少DataNode的数量,降低硬件和运维成本。
4.简化运维:EC策略简化了运维工作,避免了因数据副本丢失而导致的复杂问题。
四、HDFS EC策略的实施步骤1.配置NameNode和DataNode:配置EC策略所需的参数,如编码算法、数据块数量等。
2.创建文件:在HDFS中创建需要保护的文件,并设置相应的权限和权限策略。
3.数据切片:NameNode将文件分割成多个数据块,并根据EC策略对数据块进行编码。
4.数据存储:DataNode将编码后的数据块存储在本地,并定期向NameNode汇报数据块的状态。
5.数据访问:客户端通过NameNode访问HDFS,并根据EC策略获取和解码数据。
五、面临的挑战与解决方案1.性能挑战:EC策略在数据写入和读取时会增加额外的编码和解码操作,可能影响性能。
3.7 习题一、选择题1. B2. C3. B4. D5. B6. C7. D8. D二、填空题1.在HDFS文件系统读取文件的过程中,客户端通过对输入流调用_read() 方法开始读取数据;写入文件的过程中客户端通过对输出流调用___write()___方法开始写入数据。
2.HDFS全部文件的元数据是存储在NameNode节点的___硬盘______(硬盘/内存),为了解决这个瓶颈,HDFS产生了____HA_____机制。
三、简答题1. 举例说明Hadoop的体系结构。
Hadoop其实是由一系列的软件库组成的框架。
这些软件库也可称作功能模块,它们各自负责了Hadoop的一部分功能,其中最主要的是Common、HDFS和YARN。
Common提供远程调用RPC、序列化机制,HDFS负责数据的存储,YARN则负责统一资源调度和管理等。
2.HDFS中数据副本的存放策略是什么?HDFS默认的副本系数是3,这适用于大多数情况。
副本存放策略是将第一个副本存放在本地机架的节点上,将第二个副本放在同一机架的另一个节点上,将第三个副本放在不同机架的节点上。
这种策略减少了机架间的数据传输,这就提高了写操作的效率。
Node和DataNode的功能分别是什么?元数据节点NameNode是管理者,一个Hadoop集群只有一个NameNode节点,是一个通常在HDFS实例中的单独机器上运行的软件。
NameNode主要负责HDFS文件系统的管理工作,具体包括命名空间管理(namespace)和文件block管理。
NameNode决定是否将文件映射到DataNode的复制块上。
对于最常见的3个复制块,第一个复制块存储在同一个机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
NameNode是HDFS的大脑,它维护着整个文件系统的目录树,及目录树里所有的文件和目录,这些信息以两种文件存储在本地文件中:一种是命名空间镜像,也称为文件系统镜像(file system image,FSImage),即HDFS元数据的完整快照,每次NameNode启动时,默认会加载最新的命名空间镜像,另一种是命名空间镜像的编辑日志(edit log)。
如何在Oracle中集成Hadoop文: SRC 张旭东许多垂直行业都在关注文件系统中庞大的数据。
这些数据中通常包含大量无关的明细信息,以及部分可用于趋势分析或丰富其他数据的精华信息。
尽管这些数据存储在数据库之外,但一些客户仍然希望将其与数据库中的数据整合在一起以提取对业务用户有价值的信息。
本文详细介绍了如何从 Oracle 数据库访问存储在 Hadoop 集群里的数据。
请注意,本文选择了 Hadoop 和 HDFS 作为示例,但这里的策略同样适用于其他分布式存储机制。
本文中介绍了各种访问方法,还通过一个具体示例说明了其中一种访问方法的实现。
要从 Oracle 数据库里访问某个文件系统中的外部文件或外部数据,最简单的方法莫过于使用外部表。
外部表以表的形式展示存储在文件系统中的数据,并且可在 SQL 查询中完全透明地使用。
因此,可以考虑用外部表从 Oracle 数据库中直接访问 HDFS(Hadoop 文件系统)中存储的数据。
遗憾的是,常规的操作系统无法调用外部表驱动直接访问 HDFS 文件。
FUSE(File System in Userspace)项目针对这种情况提供了解决方法。
有多种 FUSE 驱动程序支持用户挂载 HDFS 存储,并将其作为常规文件系统处理。
通过使用一个此类驱动程序,并在数据库实例上挂载 HDFS (如果是 RAC 数据库,则在其所有实例上挂载 HDFS),即可使用外部表基础架构轻松访问 HDFS 文件。
图 1. 用数据库内置的 MapReduce 通过外部表进行访问在图 1 中,我们利用 Oracle Database 11g 实现本文所述的数据库内的 map-reduce。
通常情况下,Oracle Database 11g 中的并行执行框架足以满足针对外部表大多数的并行操作。
在有些情况下(例如,如果 FUSE 不可用),外部表方法可能不适用。
Oracle 表函数提供了从 Hadoop 中获取数据的替代方法。
ORACLE中客户端与服务器端连接问题解决方案ORACLE中客户端连接服务器端常见问题(转)要排除客户端与服务器端的连接问题,首先检查客户端配置是否正确(客户端配置必须与数据库服务器端监听配置一致),再根据错误提示解决。
下面列出几种常见的连接问题:1、ORA-*****: TNS: 没有监听器显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。
启动监听器:$ lsnrctl start或C:\lsnrctl start2、ORA-*****: TNS: 监听程序无法启动专用服务器进程对于Windows而言,没有启动Oracle实例服务。
启动实例服务:C:\oradim Cstartup -sid myoracle3、ORA-*****: TNS: 操作超时出现这个问题的原因很多,但主要跟网络有关。
解决这个问题,首先检查客户端与服务端的网络是络连通,则检查两端的防火墙是否阻挡了连接。
4、ORA-*****: TNS: 无法处理服务名检查输入的服务名与配置的服务名是否一致。
另外注意生成的本地服务名文件(Windows下如D:\oracle\ora92\network\admin\tnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/tnsnames.ora)里每项服务的首行服务名称前不能有空格。
5、ORA-*****: TNS: 监听进程不能解析在连接描述符中给出的*****_NAME打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确。
该服务名必须与服务器端监听器配置的全局数据库名一致。
6、Windows下启动监听服务提示找不到路径用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常。
打开注册表,进入HKEY_LOCAL_*****/SYSTEM/CurrentControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath 字符串项是否存在,如果没有,设定值为D:\oracle\ora92\BIN\*****,不同的安装路径设定值做相应的更改。
ORACLE 数据库故障解决方案引言概述:ORACLE 数据库是目前最常用的企业级数据库之一,然而在使用过程中,难免会遇到各种故障。
本文将介绍一些常见的 ORACLE 数据库故障解决方案,帮助读者更好地应对数据库故障。
一、数据库连接问题的解决方案:1.1 检查网络连接:确保数据库服务器和客户端之间的网络连接正常。
可以通过 ping 命令或者其他网络工具来测试网络连通性。
1.2 检查监听器状态:监听器是用于监听数据库连接请求的服务,如果监听器未启动或者出现异常,可能导致数据库连接失败。
可以使用 lsnrctl 命令来检查监听器的状态,并根据需要启动或重启监听器。
1.3 检查防火墙设置:防火墙可能会阻止数据库连接请求通过特定的端口,导致连接失败。
确保防火墙的设置允许数据库连接请求通过所需的端口。
二、数据库备份与恢复问题的解决方案:2.1 定期备份数据库:定期备份数据库是防止数据丢失的重要手段。
可以使用RMAN (Recovery Manager) 工具进行数据库备份,可以选择全量备份、增量备份或者归档日志备份等方式。
2.2 恢复数据库:当数据库出现故障时,可以使用备份文件进行数据库恢复。
可以通过 RMAN 工具进行数据库恢复,根据备份类型选择相应的恢复策略。
2.3 监控数据库恢复过程:在进行数据库恢复时,需要密切监控恢复过程,确保恢复过程的顺利进行。
可以使用 RMAN 工具提供的恢复状态查询命令来监控恢复进度。
三、数据库性能问题的解决方案:3.1 优化 SQL 查询语句:SQL 查询语句是数据库性能的关键因素之一。
通过优化 SQL 查询语句,可以提高数据库的查询效率。
可以使用 EXPLAIN PLAN 命令来分析查询语句的执行计划,并根据需要进行索引优化或者重写查询语句。
3.2 调整数据库参数:数据库参数的设置对数据库性能有很大影响。
可以通过修改数据库参数来优化数据库性能,如调整缓冲区大小、并发连接数等。
使用ORACLE连接HDFS有个专项的解决方案[O]racle [D]irect [C]onnector for [H]adoop Distributed Files System,简称ODCH。
该软件包可以到Oracle官网下载:/technetwork/bdc/big-data-connectors/downloads/index.html选择第一项:Oracle SQL Connector for Hadoop Distributed File System Release 2.1.0我们这里使用2.1版本,下载到安装包后,解压即可:[root@ora11g ~]# unzip oraosch-2.1.0.zip变态呀,压缩包里还有压缩包:[root@ora11g ~]# unzip orahdfs-2.1.0.zip -d /usr/local/[root@ora11g ~]# chown -R oracle install /usr/local/orahdfs-2.1.0在解压缩文件的bin中,hdfs_stream有两个环境变量需要手动指定,编辑该文件:[root@ora11g ~]# vi /usr/local/orahdfs-2.1.0/bin/hdfs_stream增加两行环境变量:OSCH_HOME=/usr/local/orahdfs-2.1.0HADOOP_HOME=/usr/local/hadoop-0.20.2再次编辑grid用户环境变量:[root@ora11g ~]$ vi /home/grid/.bash_profile增加下列内容:export DIRECTHDFS_HOME=/usr/local/orahdfs-2.1.0export OSCH_HOME=${DIRECTHDFS_HOME}export ORAHDFS_JAR=${DIRECTHDFS_HOME}/jlib/orahdfs.jarexport HDFS_BIN_PATH=${DIRECTHDFS_HOME}/bin以oracle用户身份登录,创建两个目录,分别用于保存ODCH的操作日志和位置文件(location files):[oracle@ora11g ~]$ mkdir /data/ora11g/ODCH/{logs,extdir} -p[oracle@ora11g ~]$ chmod -R 777 /data/ora11g/ODCH/而后以sysdba身份登录到ORACLE,创建3个directory对象:SQL> create or replace directory ODCH_LOG_DIR as '/data/ora11g/ODCH/logs';grant read, write on directory ODCH_LOG_DIR to SCOTT;create or replace directory ODCH_DATA_DIR as '/data/ora11g/ODCH/extdir';grant read, write on directory ODCH_DATA_DIR to SCOTT;create or replace directory HDFS_BIN_PATH as '/usr/local/orahdfs-2.1.0/bin';grant read,write,execute on directory HDFS_BIN_PATH to SCOTT;Directory created.SQL>Grant succeeded.SQL>Directory created.SQL>Grant succeeded.SQL>Directory created.SQL>Grant succeeded.HDFS_BIN_PATH: hdfs_stream脚本所在目录.XTAB_DATA_DIR:用来存放“位置文件”(location files)的目录。
“位置文件”(location files) 是一个配置文件,里面包含HDFS的文件路径/文件名以及文件编码格式。
ODCH_LOG_DIR, Oracle用来存放外部表的log/bad等文件的目录.创建外部表,注意location目前是随便写的,随后还要再修改:SQL> conn scott/tigerConnected.SQL> CREATE TABLE odch_ext_table2 ( ID NUMBER3 ,OWNER VARCHAR2(128)4 ,NAME VARCHAR2(128)5 ,MODIFIED DATE6 ,Val NUMBER7 ) ORGANIZATION EXTERNAL8 (TYPE oracle_loader9 DEFAULT DIRECTORY "ODCH_DATA_DIR"10 ACCESS PARAMETERS11 (12 records delimited by newline13 preprocessor HDFS_BIN_PATH:hdfs_stream14 badfile ODCH_LOG_DIR:'odch_ext_table%a_%p.bad'15 logfile ODCH_LOG_DIR:'odch_ext_table%a_%p.log'16 fields terminated by ',' OPTIONALLY ENCLOSED BY '"'17 missing field values are null18 (19 ID DECIMAL EXTERNAL,20 OWNER CHAR(200),21 NAME CHAR(200),22 MODIFIED CHAR DATE_FORMAT DATE MASK "YYYY-MM-DD HH24:MI:SS",23 Val DECIMAL EXTERNAL24 )25 )26 LOCATION ('odch/tmpdata.csv')27 ) PARALLEL REJECT LIMIT UNLIMITED;Table created..切换至grid用户,创建hdfs中的目录并上传文件到hdfs:[grid@ora11g ~]$ hadoop dfs -mkdir odch[grid@ora11g ~]$ hadoop dfs -put tmpdata.csv odch/Tmpdata.csv文件是我们通过all_objects生成的,SQL脚本为:select rownum,owner,object_name,created,data_object_id from all_objects然后,通过ODCH的jar包,生成位置文件:[grid@ora11g ~]$ hadoop jar> ${ORAHDFS_JAR} oracle.hadoop.hdfs.exttab.ExternalTable> -D oracle.hadoop.hdfs.exttab.tableName=odch_ext_table> -D oracle.hadoop.hdfs.exttab.datasetPaths=odch> -D oracle.hadoop.hdfs.exttab.datasetRegex=tmpdata.csv> -D oracle.hadoop.hdfs.exttab.connection.url="jdbcracle:thin:@//192.168.30.244:1521/jssdb"> -D er=SCOTT> -publishDEPRECATED: The class oracle.hadoop.hdfs.exttab.ExternalTable is deprecated.It is replaced by oracle.hadoop.exttab.ExternalTable.Oracle SQL Connector for HDFS Release 2.1.0 - ProductionCopyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.[Enter Database Password:]The publish command succeeded.ALTER TABLE "SCOTT"."ODCH_EXT_TABLE"LOCATION('osch-20130516031513-6000-1');The following location files were created.osch-20130516031513-6000-1 contains 1 URI, 4685141 bytes4685141 hdfs://hdnode1:9000/user/grid/odch/tmpdata.csvThe following location files were deleted.odch/tmpdata.csv not deleted. It was not created by OSCH.其中,-D:指定相关参数tableName:外部表名字datasetPaths:源数据存放路径(HDFS)datasetRegex:数据文件名connection.url racle数据库连接串er:数据库用户名scott这个生成的osch-20130516031513-6000-1就是所谓的位置文件,真正指明我们的目标数据文件,在HDFS保存的位置,查看下文件内容就明白了:[root@ora11g ~]# more /data/ora11g/ODCH/extdir/osch-20130516031513-6000-1<?xml version="1.0" encoding="UTF-8" standalone="yes"?><locationFile><header><version>1.0</version><fileName>osch-20130516031513-6000-1</fileName><createDate>2013-05-16T13:54:02</createDate><publishDate>2013-05-16T03:15:13</publishDate><productName>Oracle SQL Connector for HDFS Release 2.1.0 - Production</productName><productVersion>2.1.0</productVersion></header><uri_list><uri_list_item size="4685141" compressionCodec="">hdfs://hdnode1:9000/user/grid/odch/tmpdata.csv</uri_list_item></uri_list></locationFile>根据提示修改odch_ext_table外部表读取的文件:SQL> ALTER TABLE "SCOTT"."ODCH_EXT_TABLE"2 LOCATION3 (4 'osch-20130516031513-6000-1'5 );Table altered.SQL> set line 150 pages 1000;SQL> col owner for a10SQL> col name for a20SQL> select * from odch_ext_table where rownum<10;ID OWNER NAME MODIFIED VAL---------- ---------- -------------------- ------------ ----------1 SYS ICOL$ 15-MAY-13 22 SYS I_USER1 15-MAY-13 463 SYS CON$ 15-MAY-13 284 SYS UNDO$ 15-MAY-13 155 SYS C_COBJ# 15-MAY-13 296 SYS I_OBJ# 15-MAY-13 37 SYS PROXY_ROLE_DATA$ 15-MAY-13 258 SYS I_IND1 15-MAY-13 419 SYS I_CDEF2 15-MAY-13 549 rows selected.数据被读取出来了,竣工。